From 7c252ada09745c5aa1818b4748987a12f558963a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 29 Oct 2023 13:02:05 +0000 Subject: [PATCH] Rebuild pages at 076425befee5227b864213644c2e1fc7c3f26766 --- AY2324S1-CS2113-F11-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T17-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T17-3_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T17-4_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T18-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T18-3_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-CS2113T-W11-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113T-W11-2_tp_master/commits.json | 2 +- archive.zip | Bin 891665 -> 921443 bytes reposense-logs/reposense.log.0 | 472 +++++++++--------- summary.json | 2 +- 22 files changed, 256 insertions(+), 256 deletions(-) diff --git a/AY2324S1-CS2113-F11-2_tp_master/commits.json b/AY2324S1-CS2113-F11-2_tp_master/commits.json index 6baea6d..f3c2263 100644 --- a/AY2324S1-CS2113-F11-2_tp_master/commits.json +++ b/AY2324S1-CS2113-F11-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"kaijie0102":[{"date":"2023-10-17","commitResults":[{"hash":"1801a4716290f9e5bca33037ef07a1a3cf499655","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Haoyuli2002/RecipeStepBranch","messageBody":"Recipe step branch","fileTypesAndContributionMap":{}},{"hash":"5a3d7f322e8b5bbbcf1be7d1f0f10d968e67954e","isMergeCommit":true,"messageTitle":"Merge pull request #19 from charkty/feature/addIngredient","messageBody":"Add Ingredient and IngredientList class","fileTypesAndContributionMap":{}},{"hash":"872e6fd20ad09bd7823e87bcb5de1906339a9d51","isMergeCommit":true,"messageTitle":"Merge pull request #21 from charkty/feature/addIngredient","messageBody":"Add exception and IngredientListTest","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"958010ae127af64874f2d5da5852dc1a87c93e9b","isMergeCommit":false,"messageTitle":"Create ui class to enable user interaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":131,"deletions":17}}},{"hash":"d828b715dd9e52b1365b19547f381ced4a208c8c","isMergeCommit":false,"messageTitle":"Small bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2b3c01d0a09d35ce6551f7c7a60aeee809b0f008","isMergeCommit":false,"messageTitle":"Fix minor bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"308bc065f802679c73cbe0261befae64628d2e33","isMergeCommit":false,"messageTitle":"Standardise method naming, parameters and behaviours","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":18}}},{"hash":"fcb0b569414b36c476e00058a077c0ff47ffe159","isMergeCommit":false,"messageTitle":"Fix GitHub CI checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"85ba159f3990a6f1b91390c94740c9ff4430e848","isMergeCommit":false,"messageTitle":"Fix missing input bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"4368146baf4ceedaf3f24b5fd914e1b48e81fafc","isMergeCommit":false,"messageTitle":"Attempt to fix input bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":2}}},{"hash":"c5625386eb421d90cb4b1158c67166eae82d5657","isMergeCommit":false,"messageTitle":"Attempt to fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"1dff123f5521cb2e34b51bdc27ab0235e4927144","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bb822b9e0f6598a03169088cf0901625813c9e6b","isMergeCommit":false,"messageTitle":"Enhance test case","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":0}}}]},{"date":"2023-10-19","commitResults":[{"hash":"dd8a95e34f726ec05ae6c7762cd7d0dac3e7d1bd","isMergeCommit":false,"messageTitle":"Add RecipeParser to partse details related to recipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":35,"deletions":28},"test-code":{"insertions":31,"deletions":0}}},{"hash":"ef7a08cf0dca373d82aa22cef9d174a86e8875c3","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"37cc4905bd1a76fed4c8be95eeafcf70ae0b292c","isMergeCommit":false,"messageTitle":"Add exception class for our program","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"a9f9a12bf02a0da03ecf1b66f6060102ae617235","isMergeCommit":false,"messageTitle":"Update RecipeParser to fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"caa16ccd00aca634840787e86e80704805468285","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"75ddb64e4621b4b7d81ba5b9d4608172ca916c13","isMergeCommit":false,"messageTitle":"Make test more realistic and readable","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":1}}},{"hash":"5edd5795c389b9d6e746797a3e2a59879bad5462","isMergeCommit":false,"messageTitle":"Make code more defensive and increase SRP of UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":3}}},{"hash":"cb0405d82bf5ed86c7bac3f150dd83e2fa72cd97","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"a26a138e088ad8c12e5f6710a974539f0513e8af","isMergeCommit":true,"messageTitle":"Merge pull request #46 from kaijie0102/master","messageBody":"Make code more defensive and increase SRP of UI","fileTypesAndContributionMap":{}},{"hash":"69f66bad39932e899e22452a26ea98933ee83290","isMergeCommit":true,"messageTitle":"Merge pull request #44 from StanleyW00/revamp-main","messageBody":"Revamp main","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"94035ee43f93ce3256ad539b09c533ba00b4b94f","isMergeCommit":false,"messageTitle":"Integration of general to ingredient parsers and tracking quantity of ingredients","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":48},"other":{"insertions":1,"deletions":1},"test-code":{"insertions":1,"deletions":2}}},{"hash":"a2ce8094d67c5545ead4326c3f4b12b0d56e445f","isMergeCommit":false,"messageTitle":"Fix Junit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0},"test-code":{"insertions":4,"deletions":10}}},{"hash":"2437c60cd3aea233234d7309bdc98b0475c7bfc2","isMergeCommit":false,"messageTitle":"Edit ingredient functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":113,"deletions":7},"test-code":{"insertions":2,"deletions":2}}},{"hash":"8ca1bbe8f763d951b0ffe156460550ba17a36b67","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-26","commitResults":[{"hash":"6a05f8e3eb202a026fc6f5a0cd1ee80042ee8fa5","isMergeCommit":false,"messageTitle":"Improve ingredient functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":40}}},{"hash":"bc0f81ac42b40c9f8056607cf5ab85912fda920e","isMergeCommit":true,"messageTitle":"Merge pull request #60 from kaijie0102/branch-edit-ingredient","messageBody":"Edit ingredient objects","fileTypesAndContributionMap":{}},{"hash":"ceacd10e114138782c64a4b1602e66429b4a0e0b","isMergeCommit":true,"messageTitle":"Merge pull request #66 from charkty/documentation/developerGuide","messageBody":"Add features for user guide and help function for developer guide","fileTypesAndContributionMap":{}},{"hash":"e96abe8b5df2966f02e294393fe55f9d2bdb8858","isMergeCommit":false,"messageTitle":"Junit tests and exceptions for editing ingredients","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3},"other":{"insertions":1,"deletions":3},"test-code":{"insertions":73,"deletions":0}}},{"hash":"3a3043a328c6fafef882b910ac114939a88658ba","isMergeCommit":false,"messageTitle":"Add test edit multiple fields","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":27,"deletions":9}}},{"hash":"1d10e8b712de2919378468172ae6cb9052329081","isMergeCommit":false,"messageTitle":"Junit test to add multiple ingredients in one line","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":61,"deletions":1}}},{"hash":"7a507fba6261a5477c478847986f54b2a5157c36","isMergeCommit":true,"messageTitle":"Merge pull request #67 from kaijie0102/branch-edit-ingredient","messageBody":"Junit tests and exceptions for editing ingredients","fileTypesAndContributionMap":{}},{"hash":"7e8eb77965f25a706b0d94cccd877d1b5985721a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-ingredient-qty-unit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"068dd7ad843060a670a7c1eb6ecece07273e5edc","isMergeCommit":false,"messageTitle":"Simplify sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":9}}},{"hash":"fd7246a8165e8eb02bbd2ca88abffa61464ac43a","isMergeCommit":false,"messageTitle":"Update developer guide including a sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":118,"deletions":17}}},{"hash":"e9f666d5bdb3ef55b7819fbcf55d9aacb2c5492c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"460eee6ce4ec2e0a87e87301f8f66a6aff8921a6","isMergeCommit":false,"messageTitle":"Revert \"Update developer guide including a sequence diagram\"","messageBody":"This reverts commit fd7246a8165e8eb02bbd2ca88abffa61464ac43a.\n","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":118}}},{"hash":"a39f31e112b69867ac5c07b0cb6afdcdd0502ab1","isMergeCommit":true,"messageTitle":"Merge pull request #73 from Haoyuli2002/AddNewIngredientSequenceDiagram","messageBody":"Add new ingredient sequence diagram and modified other changes","fileTypesAndContributionMap":{}},{"hash":"f96f1d538fe59022ab0d8b12b2efbd89fd0f1f38","isMergeCommit":true,"messageTitle":"Merge pull request #74 from charkty/feature/deleteIngredient","messageBody":"Add feature for deleting ingredient and recipe","fileTypesAndContributionMap":{}},{"hash":"774d5c426cefdcfcb7ba3d1e83bdecadb41ba589","isMergeCommit":false,"messageTitle":"Add sequence diagram for viewing all ingredients","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":0}}},{"hash":"c963317a51065308b9b4d4e9cf1aa63571d23e6c","isMergeCommit":false,"messageTitle":"Add implementation of view all ingredients","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":0}}},{"hash":"4779abfada4b4a57112948008faeabfd4b15b1af","isMergeCommit":false,"messageTitle":"Improve sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":6}}},{"hash":"9518ae4337ba3045e2116aa47b8e9de825fbce8c","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2cab44b4c2d9ef2ebbc7763608710427e641752b","isMergeCommit":false,"messageTitle":"Omit trivial details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":4}}},{"hash":"c9bb1b9e1d78569238d9cf686bcbdb08ba03c09c","isMergeCommit":false,"messageTitle":"Add sequence diagram for viewing all recipes and updating DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":72,"deletions":1}}},{"hash":"4cdad2e9030c3fb3910c9bf576567c79ac407471","isMergeCommit":false,"messageTitle":"Improve View Ingredient documentation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":2}}},{"hash":"cad653a453f43f732cf61debbec231147dc6debe","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55f431013aeb5592a772128d46120ccbb18b5c1f","isMergeCommit":true,"messageTitle":"Merge pull request #78 from charkty/documentation/developerGuide","messageBody":"Exit and Help function in DG","fileTypesAndContributionMap":{}},{"hash":"54c50a5ffa7c5d6f9c81d5fe4ce9968cfa9ca5b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"adcae8a4f5f77a3e8cfc1371d87ffcc317de5a12","isMergeCommit":true,"messageTitle":"Merge pull request #87 from StanleyW00/assert-add-recipe","messageBody":"Add assert for add recipe","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"44f4cce9f0a3c2ba9aedb40c97ecf2f7f0a190e8","isMergeCommit":true,"messageTitle":"Merge pull request #80 from charkty/feature/delete","messageBody":"Add JU test for DeleteRecipeCommand and DeleteIngredientCommand","fileTypesAndContributionMap":{}},{"hash":"0606776ac4d2f9b6c5ff94125b62b8132c574abc","isMergeCommit":true,"messageTitle":"Merge pull request #91 from StanleyW00/assert-edit-ingredient","messageBody":"Add assertion to edit ingredient command","fileTypesAndContributionMap":{}},{"hash":"4cf66469c20b3aaf2cfcf3ce25d68519e40289a9","isMergeCommit":false,"messageTitle":"View specific recipe and edit recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":203,"deletions":43},"test-code":{"insertions":11,"deletions":10}}},{"hash":"f2706de9941171651928a87411504661f9d3c91b","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ad0906d46a8bf51ca80091e31b8e451a01cf8070","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":1}}},{"hash":"e58e1a9d95dd5a58f2ede8f3017392d0dc174077","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"bbc395ace8a231e79bb519607d682f1e424f343c","isMergeCommit":false,"messageTitle":"Junit test for editing recipe name and steps","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"other":{"insertions":3,"deletions":5},"test-code":{"insertions":63,"deletions":2}}},{"hash":"7e324ac97dbc9d1823cb74055c3efe86dce4dbe8","isMergeCommit":false,"messageTitle":"Add edit recipe tests and assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3},"test-code":{"insertions":11,"deletions":3}}}]},{"date":"2023-10-29","commitResults":[{"hash":"b8c090021ac75b94e1bba0dfe38c88e7626d900d","isMergeCommit":true,"messageTitle":"Merge pull request #92 from kaijie0102/branch-edit-recipe","messageBody":"Edit recipe","fileTypesAndContributionMap":{}}]}],"Haoyuli2002":[{"date":"2023-10-14","commitResults":[{"hash":"533cbebde967558dc1f78c67408189b08951af45","isMergeCommit":false,"messageTitle":"First Increment by Recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":2}}},{"hash":"b6ee03e3c0e9b49dc6e6833650a230efa0d41273","isMergeCommit":false,"messageTitle":"First Increment by Recipe(modified","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7}}}]},{"date":"2023-10-16","commitResults":[{"hash":"6eed0ddb76ed9d56e4df3b2d6cf89ad5df5e4a4d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"a2d197b2fe9eb0b3b12711e1bafa128ca5c57e8e","isMergeCommit":false,"messageTitle":"First Increment by Recipe(modified","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"db489f25f2a65900e189ec541d350ab5e5155783","isMergeCommit":false,"messageTitle":"Modified Increment by RecipeList( viewAllRecipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"9d3dc82819f8791241668a56e554763f787de6e2","isMergeCommit":false,"messageTitle":"Change the name of viewAllRecipes to listRecipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"e9d7d94d2eebbe8f8765c8fe757de5aafbb13cb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into RecipeStepBranch","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"868d4e3da30a8294519ceb9bf534f6e0ec50df41","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into RecipeStepBranch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e3d71f57d49b00ccfbed0a923f38e29bc0cc4476","isMergeCommit":true,"messageTitle":"resolve naming Conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"28b7d1360b6f549c75396ba48720d5b5cae8c531","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/RecipeStepBranch\u0027 into RecipeStepBranch","messageBody":"# Conflicts:\n#\tsrc/main/java/essenmakanan/recipe/RecipeList.java\n","fileTypesAndContributionMap":{}},{"hash":"b7afbb13e68f443d2f2d29b5a8deba6c06548979","isMergeCommit":false,"messageTitle":"resolve naming Conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":14}}},{"hash":"805d85a6a44b629562868b9f67e287ab20bd07ec","isMergeCommit":false,"messageTitle":"add assertion to the method getRecipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"1269136ca5921cbb5e1c20a092ad44b4c3e2a823","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into get-specific-recipe-branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8bf08c1eda79b465ea4f7cee39315369cb60ad14","isMergeCommit":true,"messageTitle":"Merge pull request #35 from Haoyuli2002/get-specific-recipe-branch","messageBody":"Assertions in the method getRecipe, merge the conflict","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"7a2487684b5f4d40f384838b90d377b3d6e72f00","isMergeCommit":false,"messageTitle":"AddingStepsAsFasterTypers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":11}}},{"hash":"c4d994477ba071a7db9db6905b6c9986efa5b178","isMergeCommit":false,"messageTitle":"AddingStepsAsFasterTypers(Modified)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":4}}},{"hash":"e5db90bdb0ded64e8af8082bff32654c842ac95d","isMergeCommit":false,"messageTitle":"AddingStepsAsFasterTypers(Modified)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":33},"test-code":{"insertions":35,"deletions":0}}}]},{"date":"2023-10-26","commitResults":[{"hash":"ce37a2fa244a8a7d3553257b00daaddd000e31ba","isMergeCommit":false,"messageTitle":"View Specific Recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"882f088a28caeca9ed673b7a34ef6d7be24353b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp into ViewSpecificRecipe","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4cdc3f3334235e47abb9cd01ed97aecfa51faea1","isMergeCommit":false,"messageTitle":"View Specific Recipe(Modified)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3}}},{"hash":"682761263dd78bb3f55c650e9dd06e10432868f8","isMergeCommit":false,"messageTitle":"DG(Add_Ingredient Sequence Diagram)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":0}}},{"hash":"a8f627360dd32815f2645c113d9a9e282483571c","isMergeCommit":true,"messageTitle":"Merge pull request #63 from Haoyuli2002/version2","messageBody":"AddingStepsAsFasterTypers","fileTypesAndContributionMap":{}},{"hash":"511faccdb60dcf4009cd0f57ec4c2373cc78c5bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into AddNewIngredientSequenceDiagram","messageBody":"","fileTypesAndContributionMap":{}}]}],"StanleyW00":[{"date":"2023-10-11","commitResults":[{"hash":"4447268e6ccb1338f632b53165b4bb21c99fdd58","isMergeCommit":true,"messageTitle":"Merge pull request #1 from StanleyW00/master","messageBody":"Add config.yml","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"8b3c2439f5d1cf825828243014eb49c950d2c752","isMergeCommit":true,"messageTitle":"Merge pull request #13 from Haoyuli2002/RecipeStepBranch","messageBody":"Recipe step branch","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"6035944c21b046f8cd088fff639b3323a0d74cfb","isMergeCommit":false,"messageTitle":"Add create recipe feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":64,"deletions":13}}},{"hash":"0c64219809d5cb7b43af8066da20547702877eea","isMergeCommit":false,"messageTitle":"Add testing for adding recipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0},"test-code":{"insertions":35,"deletions":0}}},{"hash":"20b6f77610183ea67e3604b052000c190bb0414e","isMergeCommit":false,"messageTitle":"Add system exit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"da5360045784c465988318559c89d321b52db980","isMergeCommit":true,"messageTitle":"Merge pull request #14 from StanleyW00/addRecipes","messageBody":"Add creating recipes","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7959531690b3e7ddc94364fe4069b6e409951068","isMergeCommit":true,"messageTitle":"Merge pull request #24 from kaijie0102/master","messageBody":"Create ui class to handle user interaction","fileTypesAndContributionMap":{}},{"hash":"b405e606c842c9f4b92dcb0bb803f45779eb2958","isMergeCommit":true,"messageTitle":"Merge pull request #27 from kaijie0102/master","messageBody":"Fix minor bug","fileTypesAndContributionMap":{}},{"hash":"8eb5ee1e1256bd6dd9bae39af2aa2eb5e7cdb2d4","isMergeCommit":false,"messageTitle":"Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"e1950bf2749c44d2852c5fc3d189ed4618cfa9cb","isMergeCommit":false,"messageTitle":"Standerdise recipe related methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":4}}},{"hash":"b7c148fca9ffde787c876a6b61b63367f4e03a65","isMergeCommit":false,"messageTitle":"Add get specific recipe method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"f469c2de2df52ed8b537ac0e9224939feedcf3b0","isMergeCommit":false,"messageTitle":"Modify add recipe test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":12,"deletions":13}}},{"hash":"f1326a5314e2209d0ace69c424ea49ff7b05d5c6","isMergeCommit":false,"messageTitle":"Delete whitespace","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"32eac014ebdfa5d74c95888e1f615aac4bb39dcb","isMergeCommit":false,"messageTitle":"Rename add recipe test method","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"6d90533ce88e5f6d8192158159232cc52b5e19f2","isMergeCommit":false,"messageTitle":"Add assertions to RecipeList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":9}}},{"hash":"43d05f869b2577aa17c35e23966d728015a4a1b5","isMergeCommit":false,"messageTitle":"Edit text ui test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"5534fe721164591172c0fa0dce02704a49113be2","isMergeCommit":false,"messageTitle":"Fix bug related to ui test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"6783f26062c4cc6302aecc2aa19b9edfa7b8d078","isMergeCommit":false,"messageTitle":"Create add recipe command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":58,"deletions":5}}},{"hash":"a1f5fa5023d530ae517d097329282f18fbe9b153","isMergeCommit":false,"messageTitle":"Create add ingredient command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":0}}},{"hash":"b3fdb4626da86913fea35d5b5f5c183bf164dc9f","isMergeCommit":false,"messageTitle":"Modify main function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":19}}},{"hash":"c8ed1dd8157c61235f14e682376c8b8180b4e918","isMergeCommit":false,"messageTitle":"Fix some style errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}}]},{"date":"2023-10-19","commitResults":[{"hash":"f0afcf37a3cbdc09d3a4655c92cd2dd39abad24f","isMergeCommit":false,"messageTitle":"Modify command classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":47}}},{"hash":"d982bca0df68a7dba2767e94e51a701a3c42e5fa","isMergeCommit":false,"messageTitle":"Add view recipes and ingredients class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":15}}},{"hash":"e2bbcb06de5faee78a55a181a18b61c5cfceff53","isMergeCommit":false,"messageTitle":"Modify ingredient list test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"489c6901eb18e5e5ec5a1eec8ef1fd567ca55305","isMergeCommit":false,"messageTitle":"Remame print recipes method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":3}}},{"hash":"94629b58743f88735a57da32299da95c2e3412a7","isMergeCommit":true,"messageTitle":"Merge pull request #34 from StanleyW00/17-add-Command","messageBody":"Add command classes","fileTypesAndContributionMap":{}},{"hash":"467e71ae6979505fc6e44a951f3d88e2fe616c9d","isMergeCommit":false,"messageTitle":"Modify the flow of main class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":92,"deletions":93}}},{"hash":"b34a3ba4e0082f8351c230d202aa8a7949a86c11","isMergeCommit":false,"messageTitle":"Create exit command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":3}}},{"hash":"e9c7037ac8588d82df8817e5d973af90a35c81a8","isMergeCommit":false,"messageTitle":"Add help command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":6}}},{"hash":"dc51db2062b67b71277e6434a373e8400b17aefc","isMergeCommit":false,"messageTitle":"Add format exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":3}}},{"hash":"476857f5b3edccf28a664678e369c8da45ce587c","isMergeCommit":false,"messageTitle":"Fix exception bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"f9f4ac53caea4bc335f07bcba34023ac4665163a","isMergeCommit":false,"messageTitle":"Fix style error in parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":1}}},{"hash":"a29fed49e4a1ff83c871627578fa971fdca44d55","isMergeCommit":false,"messageTitle":"Add logs in main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"8694442c12f02d05c307ad928c9d18eab61a8c3a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp into revamp-main","messageBody":"# Conflicts:\n#\tsrc/main/java/essenmakanan/EssenMakanan.java\n#\tsrc/main/java/essenmakanan/command/ViewIngredientsCommand.java\n#\tsrc/main/java/essenmakanan/command/ViewRecipesCommand.java\n#\tsrc/main/java/essenmakanan/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"ddb8ed79228787717d3717a27c8c7d2856a9c463","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":4}}},{"hash":"49886a9af346d347beb591f9d141d7ddec4b2e2e","isMergeCommit":false,"messageTitle":"Disable log","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"f2b66ff03c70e87e285dd6e36136af284177fc18","isMergeCommit":false,"messageTitle":"Fix checkstyle issue in main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-20","commitResults":[{"hash":"d37387f4af5bf7381b8632d26ae0efcd4df85658","isMergeCommit":false,"messageTitle":"Change the way to check exit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":24}}},{"hash":"34d5a1a7d84ef36ed9962c923d7a50cb561045df","isMergeCommit":false,"messageTitle":"Modify execute command classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":30}}}]},{"date":"2023-10-21","commitResults":[{"hash":"81d3738bff91e93398d9056fa244cb1ed7aae8b7","isMergeCommit":false,"messageTitle":"Move parser specific methods to their own classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":11}}}]},{"date":"2023-10-24","commitResults":[{"hash":"94cada6dda2861b0c319c1effd9a5d6593369052","isMergeCommit":true,"messageTitle":"Merge pull request #53 from charkty/documentation/developerGuide","messageBody":"Add template for Developer and User Guide","fileTypesAndContributionMap":{}},{"hash":"0bbf94674e19f6a4ebd80fd6b01cf4e901ed61ec","isMergeCommit":false,"messageTitle":"Modify and add new styles","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":2}}},{"hash":"48d451c5ba280939efe8652a24521e1e6ed1682d","isMergeCommit":false,"messageTitle":"Create sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":55,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"2d6a4537881e071fdb6420d300a07edb0600fbe6","isMergeCommit":false,"messageTitle":"Update developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":1}}},{"hash":"0ac6f0d05422dc59f40d49ba89545ec322f7f539","isMergeCommit":false,"messageTitle":"Change diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-27","commitResults":[{"hash":"899594b944fd0038b62e06e42a32ffc9b4d4a2da","isMergeCommit":false,"messageTitle":"Improve readibility for ingredient","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"71520876d450c54d8b01d1f08c050edfebfcd16d","isMergeCommit":false,"messageTitle":"Update user guide related to ingredients","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2},"docs":{"insertions":43,"deletions":12}}},{"hash":"d89ddc269fecbfe5bd2931a7e9c428e7bede8f65","isMergeCommit":false,"messageTitle":"Add assert for add recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"937a4b778a71d877de13fa303ad0788a8a3bbd63","isMergeCommit":false,"messageTitle":"Change layout","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"de236dc74f163fa785877243589856c55401c402","isMergeCommit":false,"messageTitle":"Rename README.md to index.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"368e1955f646818ad118b1bc0bb6cdfb67222e08","isMergeCommit":false,"messageTitle":"Change layout to default","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4409f78f14c470c7f6ed8d0f92e0d2a62b28e130","isMergeCommit":false,"messageTitle":"Add assert in adding recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"96f06972f875cf2afdbc1a41ac420e002ff55541","isMergeCommit":true,"messageTitle":"Merge pull request #90 from StanleyW00/assert-add-recipe","messageBody":"Add assert in adding recipe","fileTypesAndContributionMap":{}},{"hash":"8002891ad48a8876ba16db1c8fa8a4eb3e64bea7","isMergeCommit":false,"messageTitle":"Add assertion to edit ingredient command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}}]}],"charkty":[{"date":"2023-09-29","commitResults":[{"hash":"cc8c5bbae9ff17889a536d59a1fe4dc527a67271","isMergeCommit":false,"messageTitle":"Inital Commit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0},"other":{"insertions":2,"deletions":5}}},{"hash":"dd6b60ad98d01c3e27a8a136d064cab3c7a2f223","isMergeCommit":false,"messageTitle":"Rename main class","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"6e53e38d3d90145bb549a942ff3ddcbaf0b00f26","isMergeCommit":false,"messageTitle":"Change directory in build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"cc19609329761b12f39ea60a3852c6d2383a28ed","isMergeCommit":true,"messageTitle":"Merge pull request #1 from charkty/master","messageBody":"Inital Commit","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"9ee9475bcea3849656b21a218ce39af821019a92","isMergeCommit":false,"messageTitle":"Add Ingredient and IngredientList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":0}}},{"hash":"e62273d8150c1d3fd87c76a033f26ba44238f9d7","isMergeCommit":false,"messageTitle":"Simplify listIngredient\u0027s for loop","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":4}}},{"hash":"60d2a78737c00ba51fa302016588b02ed1801610","isMergeCommit":false,"messageTitle":"Change \u0027qty\u0027 naming and addIngredient() function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"06a8fc3adcbd4ecdb262d813b07285b18d470a95","isMergeCommit":false,"messageTitle":"Add exception and IngredientListTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0},"test-code":{"insertions":31,"deletions":0}}},{"hash":"3aa7bf85c7604d1b0927edad2f87672f09c841f7","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2},"test-code":{"insertions":0,"deletions":3}}},{"hash":"25c4d225243f0b7571e39e74aeefdf87fdce6bc3","isMergeCommit":false,"messageTitle":"Change import to correct format","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"ddfb2b196a0f5380863af3f10f9a689d30e96d93","isMergeCommit":true,"messageTitle":"Merge pull request #31 from StanleyW00/refactorAddRecipes","messageBody":"Refactor add recipes","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e7832c36ff1c6607371a6d41b1200997bfcb3854","isMergeCommit":true,"messageTitle":"Merge pull request #33 from kaijie0102/master","messageBody":"Fix bugs and merge conflicts","fileTypesAndContributionMap":{}},{"hash":"57096d1886b6e74cde0786059ef4ef25b03fd0d9","isMergeCommit":false,"messageTitle":"Add ingredient parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":46},"other":{"insertions":6,"deletions":9},"test-code":{"insertions":29,"deletions":2}}},{"hash":"af8dbd445b5bda4920c82164f168434903354368","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"feb3b6b8dad2cd21dfe94cf79972429da0428065","isMergeCommit":false,"messageTitle":"Resolve checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":6}}},{"hash":"754f337d20268d2b308c99f77c8cc954c7c755a0","isMergeCommit":true,"messageTitle":"Merge pull request #42 from charkty/parser/Ingredient","messageBody":"Add ingredient parser and edit Ui","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"934e0093cb12c72ed4f0abf069808da5067d9c56","isMergeCommit":true,"messageTitle":"Merge pull request #51 from StanleyW00/modify-logic-command","messageBody":"[Enhancement] Modify logic command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"9eda75c9cc09a7191362d46958b0e8fdf337df70","isMergeCommit":false,"messageTitle":"Add template for Developer and User Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":201,"deletions":12}}},{"hash":"0575003df7a547e9d30f1b6bd28ae33010d0c49c","isMergeCommit":true,"messageTitle":"Merge pull request #52 from StanleyW00/refactor-parser","messageBody":"Refactor parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"1a83a29c35a2908d5d0e3fd93c8dfcd3ae13471b","isMergeCommit":true,"messageTitle":"Merge pull request #59 from kaijie0102/master","messageBody":"Parser integration and enhancement of Ingredient class","fileTypesAndContributionMap":{}},{"hash":"f5866525c5ca4365951cdd89e71e9c15d3950432","isMergeCommit":false,"messageTitle":"Update features for user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":74,"deletions":3}}}]},{"date":"2023-10-26","commitResults":[{"hash":"21f2f24a20d8e185260f18739bc298516fd64b12","isMergeCommit":false,"messageTitle":"Create sequence diagram for help function","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":43,"deletions":0}}},{"hash":"68e79d8aaef5b66167526bf612879c8b4e7ddc70","isMergeCommit":false,"messageTitle":"Reformat","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":6}}},{"hash":"9e34856934552e225df6b8c96ad062d015c914ef","isMergeCommit":true,"messageTitle":"Merge pull request #64 from StanleyW00/add-new-recipe-diagram","messageBody":"Add new recipe diagram","fileTypesAndContributionMap":{}},{"hash":"65bf693b5b916e63b184ffd9302a2683e1b20928","isMergeCommit":false,"messageTitle":"Add showCommands() to sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"cf9a6619ca7afd707f5cf28f4bfe1a3082550f8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into documentation/developerGuide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"034c51e5b6852c41948861da715aaa064fa49f78","isMergeCommit":false,"messageTitle":"Create developer guide\u0027s help feature implementation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":7}}},{"hash":"c21aa1564aef1125063a3320fcb3a52f12342d85","isMergeCommit":false,"messageTitle":"Add Delete command in Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":2}}},{"hash":"aff6c22bbae4029740f693e6c50bcbec03923f09","isMergeCommit":true,"messageTitle":"Solve merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b6436b9f03fec96ec7c9259361bb694edd498aad","isMergeCommit":false,"messageTitle":"Create delete ingredient function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":106,"deletions":25},"test-code":{"insertions":2,"deletions":2}}},{"hash":"4de8da08513a047f4762b0ee493a99e489091ca3","isMergeCommit":false,"messageTitle":"Handle exceptions for delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":11}}},{"hash":"856a27fb0cfc917708e3701d659a41c2ace94622","isMergeCommit":false,"messageTitle":"Solve issues in delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":50,"deletions":40},"test-code":{"insertions":133,"deletions":0}}},{"hash":"f3d8ca29c8e5a7f88e3169d024043545c633632f","isMergeCommit":false,"messageTitle":"Clean up delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3},"test-code":{"insertions":0,"deletions":133}}},{"hash":"e7ce1eed6ccd66d9e17951ba37a3599b9d45a8cb","isMergeCommit":false,"messageTitle":"Add relevant imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":4}}},{"hash":"3f19c22122db10d4d155e722a6f469f5c510f2c7","isMergeCommit":false,"messageTitle":"Correct checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"0c4ecb8292c37c0551281a6a812dab75ad6d0207","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into feature/deleteIngredient","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d10cafeea3ec35ff2b1d074822f196ae91a4428","isMergeCommit":false,"messageTitle":"Change checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":5}}},{"hash":"bbfd1d36d9e0a40a3002304d9c381f96f9da804b","isMergeCommit":false,"messageTitle":"Add delete command to start message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":12}}},{"hash":"d2704f80e2a20a8035dafb3c1fe641748a5612e6","isMergeCommit":false,"messageTitle":"Rectify long sentence","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"1726122f2f2cb3839caf48c407d2308ec539bc00","isMergeCommit":true,"messageTitle":"Merge pull request #68 from kaijie0102/branch-ingredient-qty-unit","messageBody":"Junit test to add multiple ingredients in one line","fileTypesAndContributionMap":{}},{"hash":"065b6372cc43931899da1f312369130313c21e22","isMergeCommit":false,"messageTitle":"Tidy showCommands() in Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":14}}},{"hash":"dc706dd319c03cb51b0343244e76552fa3b6dee8","isMergeCommit":false,"messageTitle":"Standardise everything to index","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":31}}},{"hash":"6c8ae679dc55ad19b0738416da300b09d0987f68","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0dedaf9ea6c7781cb66e89696e5f4a1a3e2981c1","isMergeCommit":true,"messageTitle":"Merge pull request #76 from kaijie0102/master","messageBody":"Update developer guide for viewing ingredients","fileTypesAndContributionMap":{}},{"hash":"a8908ee81fd9023042048bd8fc4e084379345bbb","isMergeCommit":false,"messageTitle":"Create exit sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":0}}},{"hash":"957260f4262da7513f655e8ac7587c65bd7b8529","isMergeCommit":false,"messageTitle":"Add steps for help feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":2}}},{"hash":"1763b6788b0ea138d9a178dfd7def1ec8bb366a6","isMergeCommit":false,"messageTitle":"Add steps for exit command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":0}}},{"hash":"03ae637bf4eba4c7ed3f500547ca3cfa5f88cf37","isMergeCommit":true,"messageTitle":"Merge pull request #77 from kaijie0102/master","messageBody":"Add sequence diagram for viewing all recipes and updating DG","fileTypesAndContributionMap":{}},{"hash":"d5f9312405b523e3e00a0f16cf247b11e4175bc9","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"74a474c6cf47c27fdbf1464e7d98e3200c8e9a02","isMergeCommit":true,"messageTitle":"Merge pull request #79 from kaijie0102/master","messageBody":"Improve view ingredients documentation","fileTypesAndContributionMap":{}},{"hash":"01589367b8bb1113cf91a8e40ca5ef0bf2ec534a","isMergeCommit":false,"messageTitle":"Add assertion and remove exception from RecipeList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":8}}},{"hash":"feb16d869bbfe387268f35b7eeeda42e9c59a29b","isMergeCommit":false,"messageTitle":"Shorten names of exception classes","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"8f5b7d64145348c06ca3194476e574047e457e7b","isMergeCommit":false,"messageTitle":"Refactor exception classes in other classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":57,"deletions":57},"test-code":{"insertions":72,"deletions":10}}},{"hash":"63b1adeda242eb21b19e205228401e18b8ca7f65","isMergeCommit":false,"messageTitle":"Add JU test for delete ingredient command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":24,"deletions":10}}},{"hash":"60e7f9f00528effbe2697855eaea0b57af143f77","isMergeCommit":false,"messageTitle":"Add JU Test for IngredientParser and remove unused exception in delete function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":12},"test-code":{"insertions":36,"deletions":5}}},{"hash":"e4eb6638051b73103aaa4b4e4ffb5f70b0c35961","isMergeCommit":false,"messageTitle":"Add JU test for Delete Recipe Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2},"test-code":{"insertions":75,"deletions":0}}},{"hash":"7ac1c9f5cbd06e7bfd80a4ac02f08d6279f78d8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into feature/delete","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"746d9b6022f007c11cb48cc35af633109e40aeff","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":1,"deletions":5}}},{"hash":"0e122d5253e5901139feb79b7d61c38786ccb88e","isMergeCommit":true,"messageTitle":"Merge pull request #83 from StanleyW00/second-half-ug","messageBody":"Update ingredient UG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"44950b10aa5f5b8412b618f68539bc446bb186bc","isMergeCommit":true,"messageTitle":"Merge pull request #89 from StanleyW00/bug-theme-pages","messageBody":"Fix pages bug","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kaijie0102":{"docs":192,"functional-code":518,"test-code":258},"Haoyuli2002":{"docs":82,"functional-code":88,"test-code":30},"StanleyW00":{"docs":122,"functional-code":297,"test-code":21,"other":1},"charkty":{"docs":377,"functional-code":361,"test-code":244,"other":2}},"authorContributionVariance":{"kaijie0102":21314.037,"Haoyuli2002":1135.3525,"StanleyW00":7539.0454,"charkty":27227.66},"authorDisplayNameMap":{"kaijie0102":"CS2113-F11-2 LEOW.. JIE","Haoyuli2002":"CS2113-F11-2 LI H..AOYU","StanleyW00":"CS2113-F11-2 STAN..JAYA","charkty":"CS2113-F11-2 CHAR..G YU"}} +{"authorDailyContributionsMap":{"kaijie0102":[{"date":"2023-10-17","commitResults":[{"hash":"1801a4716290f9e5bca33037ef07a1a3cf499655","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Haoyuli2002/RecipeStepBranch","messageBody":"Recipe step branch","fileTypesAndContributionMap":{}},{"hash":"5a3d7f322e8b5bbbcf1be7d1f0f10d968e67954e","isMergeCommit":true,"messageTitle":"Merge pull request #19 from charkty/feature/addIngredient","messageBody":"Add Ingredient and IngredientList class","fileTypesAndContributionMap":{}},{"hash":"872e6fd20ad09bd7823e87bcb5de1906339a9d51","isMergeCommit":true,"messageTitle":"Merge pull request #21 from charkty/feature/addIngredient","messageBody":"Add exception and IngredientListTest","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"958010ae127af64874f2d5da5852dc1a87c93e9b","isMergeCommit":false,"messageTitle":"Create ui class to enable user interaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":131,"deletions":17}}},{"hash":"d828b715dd9e52b1365b19547f381ced4a208c8c","isMergeCommit":false,"messageTitle":"Small bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2b3c01d0a09d35ce6551f7c7a60aeee809b0f008","isMergeCommit":false,"messageTitle":"Fix minor bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"308bc065f802679c73cbe0261befae64628d2e33","isMergeCommit":false,"messageTitle":"Standardise method naming, parameters and behaviours","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":18}}},{"hash":"fcb0b569414b36c476e00058a077c0ff47ffe159","isMergeCommit":false,"messageTitle":"Fix GitHub CI checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"85ba159f3990a6f1b91390c94740c9ff4430e848","isMergeCommit":false,"messageTitle":"Fix missing input bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"4368146baf4ceedaf3f24b5fd914e1b48e81fafc","isMergeCommit":false,"messageTitle":"Attempt to fix input bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":2}}},{"hash":"c5625386eb421d90cb4b1158c67166eae82d5657","isMergeCommit":false,"messageTitle":"Attempt to fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"1dff123f5521cb2e34b51bdc27ab0235e4927144","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bb822b9e0f6598a03169088cf0901625813c9e6b","isMergeCommit":false,"messageTitle":"Enhance test case","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":0}}}]},{"date":"2023-10-19","commitResults":[{"hash":"dd8a95e34f726ec05ae6c7762cd7d0dac3e7d1bd","isMergeCommit":false,"messageTitle":"Add RecipeParser to partse details related to recipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":35,"deletions":28},"test-code":{"insertions":31,"deletions":0}}},{"hash":"ef7a08cf0dca373d82aa22cef9d174a86e8875c3","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"37cc4905bd1a76fed4c8be95eeafcf70ae0b292c","isMergeCommit":false,"messageTitle":"Add exception class for our program","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"a9f9a12bf02a0da03ecf1b66f6060102ae617235","isMergeCommit":false,"messageTitle":"Update RecipeParser to fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"caa16ccd00aca634840787e86e80704805468285","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"75ddb64e4621b4b7d81ba5b9d4608172ca916c13","isMergeCommit":false,"messageTitle":"Make test more realistic and readable","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":1}}},{"hash":"5edd5795c389b9d6e746797a3e2a59879bad5462","isMergeCommit":false,"messageTitle":"Make code more defensive and increase SRP of UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":3}}},{"hash":"cb0405d82bf5ed86c7bac3f150dd83e2fa72cd97","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"a26a138e088ad8c12e5f6710a974539f0513e8af","isMergeCommit":true,"messageTitle":"Merge pull request #46 from kaijie0102/master","messageBody":"Make code more defensive and increase SRP of UI","fileTypesAndContributionMap":{}},{"hash":"69f66bad39932e899e22452a26ea98933ee83290","isMergeCommit":true,"messageTitle":"Merge pull request #44 from StanleyW00/revamp-main","messageBody":"Revamp main","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"94035ee43f93ce3256ad539b09c533ba00b4b94f","isMergeCommit":false,"messageTitle":"Integration of general to ingredient parsers and tracking quantity of ingredients","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":48},"other":{"insertions":1,"deletions":1},"test-code":{"insertions":1,"deletions":2}}},{"hash":"a2ce8094d67c5545ead4326c3f4b12b0d56e445f","isMergeCommit":false,"messageTitle":"Fix Junit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0},"test-code":{"insertions":4,"deletions":10}}},{"hash":"2437c60cd3aea233234d7309bdc98b0475c7bfc2","isMergeCommit":false,"messageTitle":"Edit ingredient functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":113,"deletions":7},"test-code":{"insertions":2,"deletions":2}}},{"hash":"8ca1bbe8f763d951b0ffe156460550ba17a36b67","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-26","commitResults":[{"hash":"6a05f8e3eb202a026fc6f5a0cd1ee80042ee8fa5","isMergeCommit":false,"messageTitle":"Improve ingredient functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":40}}},{"hash":"bc0f81ac42b40c9f8056607cf5ab85912fda920e","isMergeCommit":true,"messageTitle":"Merge pull request #60 from kaijie0102/branch-edit-ingredient","messageBody":"Edit ingredient objects","fileTypesAndContributionMap":{}},{"hash":"ceacd10e114138782c64a4b1602e66429b4a0e0b","isMergeCommit":true,"messageTitle":"Merge pull request #66 from charkty/documentation/developerGuide","messageBody":"Add features for user guide and help function for developer guide","fileTypesAndContributionMap":{}},{"hash":"e96abe8b5df2966f02e294393fe55f9d2bdb8858","isMergeCommit":false,"messageTitle":"Junit tests and exceptions for editing ingredients","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3},"other":{"insertions":1,"deletions":3},"test-code":{"insertions":73,"deletions":0}}},{"hash":"3a3043a328c6fafef882b910ac114939a88658ba","isMergeCommit":false,"messageTitle":"Add test edit multiple fields","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":27,"deletions":9}}},{"hash":"1d10e8b712de2919378468172ae6cb9052329081","isMergeCommit":false,"messageTitle":"Junit test to add multiple ingredients in one line","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":61,"deletions":1}}},{"hash":"7a507fba6261a5477c478847986f54b2a5157c36","isMergeCommit":true,"messageTitle":"Merge pull request #67 from kaijie0102/branch-edit-ingredient","messageBody":"Junit tests and exceptions for editing ingredients","fileTypesAndContributionMap":{}},{"hash":"7e8eb77965f25a706b0d94cccd877d1b5985721a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-ingredient-qty-unit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"068dd7ad843060a670a7c1eb6ecece07273e5edc","isMergeCommit":false,"messageTitle":"Simplify sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":9}}},{"hash":"fd7246a8165e8eb02bbd2ca88abffa61464ac43a","isMergeCommit":false,"messageTitle":"Update developer guide including a sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":118,"deletions":17}}},{"hash":"e9f666d5bdb3ef55b7819fbcf55d9aacb2c5492c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"460eee6ce4ec2e0a87e87301f8f66a6aff8921a6","isMergeCommit":false,"messageTitle":"Revert \"Update developer guide including a sequence diagram\"","messageBody":"This reverts commit fd7246a8165e8eb02bbd2ca88abffa61464ac43a.\n","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":118}}},{"hash":"a39f31e112b69867ac5c07b0cb6afdcdd0502ab1","isMergeCommit":true,"messageTitle":"Merge pull request #73 from Haoyuli2002/AddNewIngredientSequenceDiagram","messageBody":"Add new ingredient sequence diagram and modified other changes","fileTypesAndContributionMap":{}},{"hash":"f96f1d538fe59022ab0d8b12b2efbd89fd0f1f38","isMergeCommit":true,"messageTitle":"Merge pull request #74 from charkty/feature/deleteIngredient","messageBody":"Add feature for deleting ingredient and recipe","fileTypesAndContributionMap":{}},{"hash":"774d5c426cefdcfcb7ba3d1e83bdecadb41ba589","isMergeCommit":false,"messageTitle":"Add sequence diagram for viewing all ingredients","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":0}}},{"hash":"c963317a51065308b9b4d4e9cf1aa63571d23e6c","isMergeCommit":false,"messageTitle":"Add implementation of view all ingredients","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":0}}},{"hash":"4779abfada4b4a57112948008faeabfd4b15b1af","isMergeCommit":false,"messageTitle":"Improve sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":6}}},{"hash":"9518ae4337ba3045e2116aa47b8e9de825fbce8c","isMergeCommit":true,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2cab44b4c2d9ef2ebbc7763608710427e641752b","isMergeCommit":false,"messageTitle":"Omit trivial details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":4}}},{"hash":"c9bb1b9e1d78569238d9cf686bcbdb08ba03c09c","isMergeCommit":false,"messageTitle":"Add sequence diagram for viewing all recipes and updating DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":72,"deletions":1}}},{"hash":"4cdad2e9030c3fb3910c9bf576567c79ac407471","isMergeCommit":false,"messageTitle":"Improve View Ingredient documentation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":2}}},{"hash":"cad653a453f43f732cf61debbec231147dc6debe","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55f431013aeb5592a772128d46120ccbb18b5c1f","isMergeCommit":true,"messageTitle":"Merge pull request #78 from charkty/documentation/developerGuide","messageBody":"Exit and Help function in DG","fileTypesAndContributionMap":{}},{"hash":"54c50a5ffa7c5d6f9c81d5fe4ce9968cfa9ca5b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"adcae8a4f5f77a3e8cfc1371d87ffcc317de5a12","isMergeCommit":true,"messageTitle":"Merge pull request #87 from StanleyW00/assert-add-recipe","messageBody":"Add assert for add recipe","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"44f4cce9f0a3c2ba9aedb40c97ecf2f7f0a190e8","isMergeCommit":true,"messageTitle":"Merge pull request #80 from charkty/feature/delete","messageBody":"Add JU test for DeleteRecipeCommand and DeleteIngredientCommand","fileTypesAndContributionMap":{}},{"hash":"0606776ac4d2f9b6c5ff94125b62b8132c574abc","isMergeCommit":true,"messageTitle":"Merge pull request #91 from StanleyW00/assert-edit-ingredient","messageBody":"Add assertion to edit ingredient command","fileTypesAndContributionMap":{}},{"hash":"4cf66469c20b3aaf2cfcf3ce25d68519e40289a9","isMergeCommit":false,"messageTitle":"View specific recipe and edit recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":203,"deletions":43},"test-code":{"insertions":11,"deletions":10}}},{"hash":"f2706de9941171651928a87411504661f9d3c91b","isMergeCommit":true,"messageTitle":"Fix merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ad0906d46a8bf51ca80091e31b8e451a01cf8070","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":1}}},{"hash":"e58e1a9d95dd5a58f2ede8f3017392d0dc174077","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"bbc395ace8a231e79bb519607d682f1e424f343c","isMergeCommit":false,"messageTitle":"Junit test for editing recipe name and steps","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"other":{"insertions":3,"deletions":5},"test-code":{"insertions":63,"deletions":2}}},{"hash":"7e324ac97dbc9d1823cb74055c3efe86dce4dbe8","isMergeCommit":false,"messageTitle":"Add edit recipe tests and assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3},"test-code":{"insertions":11,"deletions":3}}}]},{"date":"2023-10-29","commitResults":[{"hash":"b8c090021ac75b94e1bba0dfe38c88e7626d900d","isMergeCommit":true,"messageTitle":"Merge pull request #92 from kaijie0102/branch-edit-recipe","messageBody":"Edit recipe","tags":["v1.5"],"fileTypesAndContributionMap":{}}]}],"Haoyuli2002":[{"date":"2023-10-14","commitResults":[{"hash":"533cbebde967558dc1f78c67408189b08951af45","isMergeCommit":false,"messageTitle":"First Increment by Recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":2}}},{"hash":"b6ee03e3c0e9b49dc6e6833650a230efa0d41273","isMergeCommit":false,"messageTitle":"First Increment by Recipe(modified","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7}}}]},{"date":"2023-10-16","commitResults":[{"hash":"6eed0ddb76ed9d56e4df3b2d6cf89ad5df5e4a4d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"a2d197b2fe9eb0b3b12711e1bafa128ca5c57e8e","isMergeCommit":false,"messageTitle":"First Increment by Recipe(modified","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"db489f25f2a65900e189ec541d350ab5e5155783","isMergeCommit":false,"messageTitle":"Modified Increment by RecipeList( viewAllRecipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"9d3dc82819f8791241668a56e554763f787de6e2","isMergeCommit":false,"messageTitle":"Change the name of viewAllRecipes to listRecipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"e9d7d94d2eebbe8f8765c8fe757de5aafbb13cb4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into RecipeStepBranch","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"868d4e3da30a8294519ceb9bf534f6e0ec50df41","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into RecipeStepBranch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e3d71f57d49b00ccfbed0a923f38e29bc0cc4476","isMergeCommit":true,"messageTitle":"resolve naming Conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"28b7d1360b6f549c75396ba48720d5b5cae8c531","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/RecipeStepBranch\u0027 into RecipeStepBranch","messageBody":"# Conflicts:\n#\tsrc/main/java/essenmakanan/recipe/RecipeList.java\n","fileTypesAndContributionMap":{}},{"hash":"b7afbb13e68f443d2f2d29b5a8deba6c06548979","isMergeCommit":false,"messageTitle":"resolve naming Conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":14}}},{"hash":"805d85a6a44b629562868b9f67e287ab20bd07ec","isMergeCommit":false,"messageTitle":"add assertion to the method getRecipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"1269136ca5921cbb5e1c20a092ad44b4c3e2a823","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into get-specific-recipe-branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8bf08c1eda79b465ea4f7cee39315369cb60ad14","isMergeCommit":true,"messageTitle":"Merge pull request #35 from Haoyuli2002/get-specific-recipe-branch","messageBody":"Assertions in the method getRecipe, merge the conflict","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"7a2487684b5f4d40f384838b90d377b3d6e72f00","isMergeCommit":false,"messageTitle":"AddingStepsAsFasterTypers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":11}}},{"hash":"c4d994477ba071a7db9db6905b6c9986efa5b178","isMergeCommit":false,"messageTitle":"AddingStepsAsFasterTypers(Modified)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":4}}},{"hash":"e5db90bdb0ded64e8af8082bff32654c842ac95d","isMergeCommit":false,"messageTitle":"AddingStepsAsFasterTypers(Modified)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":33},"test-code":{"insertions":35,"deletions":0}}}]},{"date":"2023-10-26","commitResults":[{"hash":"ce37a2fa244a8a7d3553257b00daaddd000e31ba","isMergeCommit":false,"messageTitle":"View Specific Recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"882f088a28caeca9ed673b7a34ef6d7be24353b5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp into ViewSpecificRecipe","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4cdc3f3334235e47abb9cd01ed97aecfa51faea1","isMergeCommit":false,"messageTitle":"View Specific Recipe(Modified)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3}}},{"hash":"682761263dd78bb3f55c650e9dd06e10432868f8","isMergeCommit":false,"messageTitle":"DG(Add_Ingredient Sequence Diagram)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":0}}},{"hash":"a8f627360dd32815f2645c113d9a9e282483571c","isMergeCommit":true,"messageTitle":"Merge pull request #63 from Haoyuli2002/version2","messageBody":"AddingStepsAsFasterTypers","fileTypesAndContributionMap":{}},{"hash":"511faccdb60dcf4009cd0f57ec4c2373cc78c5bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into AddNewIngredientSequenceDiagram","messageBody":"","fileTypesAndContributionMap":{}}]}],"StanleyW00":[{"date":"2023-10-11","commitResults":[{"hash":"4447268e6ccb1338f632b53165b4bb21c99fdd58","isMergeCommit":true,"messageTitle":"Merge pull request #1 from StanleyW00/master","messageBody":"Add config.yml","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"8b3c2439f5d1cf825828243014eb49c950d2c752","isMergeCommit":true,"messageTitle":"Merge pull request #13 from Haoyuli2002/RecipeStepBranch","messageBody":"Recipe step branch","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"6035944c21b046f8cd088fff639b3323a0d74cfb","isMergeCommit":false,"messageTitle":"Add create recipe feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":64,"deletions":13}}},{"hash":"0c64219809d5cb7b43af8066da20547702877eea","isMergeCommit":false,"messageTitle":"Add testing for adding recipes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0},"test-code":{"insertions":35,"deletions":0}}},{"hash":"20b6f77610183ea67e3604b052000c190bb0414e","isMergeCommit":false,"messageTitle":"Add system exit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"da5360045784c465988318559c89d321b52db980","isMergeCommit":true,"messageTitle":"Merge pull request #14 from StanleyW00/addRecipes","messageBody":"Add creating recipes","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7959531690b3e7ddc94364fe4069b6e409951068","isMergeCommit":true,"messageTitle":"Merge pull request #24 from kaijie0102/master","messageBody":"Create ui class to handle user interaction","fileTypesAndContributionMap":{}},{"hash":"b405e606c842c9f4b92dcb0bb803f45779eb2958","isMergeCommit":true,"messageTitle":"Merge pull request #27 from kaijie0102/master","messageBody":"Fix minor bug","fileTypesAndContributionMap":{}},{"hash":"8eb5ee1e1256bd6dd9bae39af2aa2eb5e7cdb2d4","isMergeCommit":false,"messageTitle":"Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"e1950bf2749c44d2852c5fc3d189ed4618cfa9cb","isMergeCommit":false,"messageTitle":"Standerdise recipe related methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":4}}},{"hash":"b7c148fca9ffde787c876a6b61b63367f4e03a65","isMergeCommit":false,"messageTitle":"Add get specific recipe method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"f469c2de2df52ed8b537ac0e9224939feedcf3b0","isMergeCommit":false,"messageTitle":"Modify add recipe test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":12,"deletions":13}}},{"hash":"f1326a5314e2209d0ace69c424ea49ff7b05d5c6","isMergeCommit":false,"messageTitle":"Delete whitespace","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"32eac014ebdfa5d74c95888e1f615aac4bb39dcb","isMergeCommit":false,"messageTitle":"Rename add recipe test method","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"6d90533ce88e5f6d8192158159232cc52b5e19f2","isMergeCommit":false,"messageTitle":"Add assertions to RecipeList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":9}}},{"hash":"43d05f869b2577aa17c35e23966d728015a4a1b5","isMergeCommit":false,"messageTitle":"Edit text ui test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"5534fe721164591172c0fa0dce02704a49113be2","isMergeCommit":false,"messageTitle":"Fix bug related to ui test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"6783f26062c4cc6302aecc2aa19b9edfa7b8d078","isMergeCommit":false,"messageTitle":"Create add recipe command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":58,"deletions":5}}},{"hash":"a1f5fa5023d530ae517d097329282f18fbe9b153","isMergeCommit":false,"messageTitle":"Create add ingredient command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":0}}},{"hash":"b3fdb4626da86913fea35d5b5f5c183bf164dc9f","isMergeCommit":false,"messageTitle":"Modify main function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":19}}},{"hash":"c8ed1dd8157c61235f14e682376c8b8180b4e918","isMergeCommit":false,"messageTitle":"Fix some style errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}}]},{"date":"2023-10-19","commitResults":[{"hash":"f0afcf37a3cbdc09d3a4655c92cd2dd39abad24f","isMergeCommit":false,"messageTitle":"Modify command classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":47}}},{"hash":"d982bca0df68a7dba2767e94e51a701a3c42e5fa","isMergeCommit":false,"messageTitle":"Add view recipes and ingredients class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":15}}},{"hash":"e2bbcb06de5faee78a55a181a18b61c5cfceff53","isMergeCommit":false,"messageTitle":"Modify ingredient list test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"489c6901eb18e5e5ec5a1eec8ef1fd567ca55305","isMergeCommit":false,"messageTitle":"Remame print recipes method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":3}}},{"hash":"94629b58743f88735a57da32299da95c2e3412a7","isMergeCommit":true,"messageTitle":"Merge pull request #34 from StanleyW00/17-add-Command","messageBody":"Add command classes","fileTypesAndContributionMap":{}},{"hash":"467e71ae6979505fc6e44a951f3d88e2fe616c9d","isMergeCommit":false,"messageTitle":"Modify the flow of main class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":92,"deletions":93}}},{"hash":"b34a3ba4e0082f8351c230d202aa8a7949a86c11","isMergeCommit":false,"messageTitle":"Create exit command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":3}}},{"hash":"e9c7037ac8588d82df8817e5d973af90a35c81a8","isMergeCommit":false,"messageTitle":"Add help command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":6}}},{"hash":"dc51db2062b67b71277e6434a373e8400b17aefc","isMergeCommit":false,"messageTitle":"Add format exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":3}}},{"hash":"476857f5b3edccf28a664678e369c8da45ce587c","isMergeCommit":false,"messageTitle":"Fix exception bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"f9f4ac53caea4bc335f07bcba34023ac4665163a","isMergeCommit":false,"messageTitle":"Fix style error in parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":1}}},{"hash":"a29fed49e4a1ff83c871627578fa971fdca44d55","isMergeCommit":false,"messageTitle":"Add logs in main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"8694442c12f02d05c307ad928c9d18eab61a8c3a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-2/tp into revamp-main","messageBody":"# Conflicts:\n#\tsrc/main/java/essenmakanan/EssenMakanan.java\n#\tsrc/main/java/essenmakanan/command/ViewIngredientsCommand.java\n#\tsrc/main/java/essenmakanan/command/ViewRecipesCommand.java\n#\tsrc/main/java/essenmakanan/ui/Ui.java\n","fileTypesAndContributionMap":{}},{"hash":"ddb8ed79228787717d3717a27c8c7d2856a9c463","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":4}}},{"hash":"49886a9af346d347beb591f9d141d7ddec4b2e2e","isMergeCommit":false,"messageTitle":"Disable log","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"f2b66ff03c70e87e285dd6e36136af284177fc18","isMergeCommit":false,"messageTitle":"Fix checkstyle issue in main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-20","commitResults":[{"hash":"d37387f4af5bf7381b8632d26ae0efcd4df85658","isMergeCommit":false,"messageTitle":"Change the way to check exit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":24}}},{"hash":"34d5a1a7d84ef36ed9962c923d7a50cb561045df","isMergeCommit":false,"messageTitle":"Modify execute command classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":30}}}]},{"date":"2023-10-21","commitResults":[{"hash":"81d3738bff91e93398d9056fa244cb1ed7aae8b7","isMergeCommit":false,"messageTitle":"Move parser specific methods to their own classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":11}}}]},{"date":"2023-10-24","commitResults":[{"hash":"94cada6dda2861b0c319c1effd9a5d6593369052","isMergeCommit":true,"messageTitle":"Merge pull request #53 from charkty/documentation/developerGuide","messageBody":"Add template for Developer and User Guide","fileTypesAndContributionMap":{}},{"hash":"0bbf94674e19f6a4ebd80fd6b01cf4e901ed61ec","isMergeCommit":false,"messageTitle":"Modify and add new styles","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":2}}},{"hash":"48d451c5ba280939efe8652a24521e1e6ed1682d","isMergeCommit":false,"messageTitle":"Create sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":55,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"2d6a4537881e071fdb6420d300a07edb0600fbe6","isMergeCommit":false,"messageTitle":"Update developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":1}}},{"hash":"0ac6f0d05422dc59f40d49ba89545ec322f7f539","isMergeCommit":false,"messageTitle":"Change diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-27","commitResults":[{"hash":"899594b944fd0038b62e06e42a32ffc9b4d4a2da","isMergeCommit":false,"messageTitle":"Improve readibility for ingredient","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"71520876d450c54d8b01d1f08c050edfebfcd16d","isMergeCommit":false,"messageTitle":"Update user guide related to ingredients","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2},"docs":{"insertions":43,"deletions":12}}},{"hash":"d89ddc269fecbfe5bd2931a7e9c428e7bede8f65","isMergeCommit":false,"messageTitle":"Add assert for add recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"937a4b778a71d877de13fa303ad0788a8a3bbd63","isMergeCommit":false,"messageTitle":"Change layout","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"de236dc74f163fa785877243589856c55401c402","isMergeCommit":false,"messageTitle":"Rename README.md to index.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"368e1955f646818ad118b1bc0bb6cdfb67222e08","isMergeCommit":false,"messageTitle":"Change layout to default","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4409f78f14c470c7f6ed8d0f92e0d2a62b28e130","isMergeCommit":false,"messageTitle":"Add assert in adding recipe","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"96f06972f875cf2afdbc1a41ac420e002ff55541","isMergeCommit":true,"messageTitle":"Merge pull request #90 from StanleyW00/assert-add-recipe","messageBody":"Add assert in adding recipe","fileTypesAndContributionMap":{}},{"hash":"8002891ad48a8876ba16db1c8fa8a4eb3e64bea7","isMergeCommit":false,"messageTitle":"Add assertion to edit ingredient command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}}]}],"charkty":[{"date":"2023-09-29","commitResults":[{"hash":"cc8c5bbae9ff17889a536d59a1fe4dc527a67271","isMergeCommit":false,"messageTitle":"Inital Commit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0},"other":{"insertions":2,"deletions":5}}},{"hash":"dd6b60ad98d01c3e27a8a136d064cab3c7a2f223","isMergeCommit":false,"messageTitle":"Rename main class","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"6e53e38d3d90145bb549a942ff3ddcbaf0b00f26","isMergeCommit":false,"messageTitle":"Change directory in build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"cc19609329761b12f39ea60a3852c6d2383a28ed","isMergeCommit":true,"messageTitle":"Merge pull request #1 from charkty/master","messageBody":"Inital Commit","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"9ee9475bcea3849656b21a218ce39af821019a92","isMergeCommit":false,"messageTitle":"Add Ingredient and IngredientList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":0}}},{"hash":"e62273d8150c1d3fd87c76a033f26ba44238f9d7","isMergeCommit":false,"messageTitle":"Simplify listIngredient\u0027s for loop","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":4}}},{"hash":"60d2a78737c00ba51fa302016588b02ed1801610","isMergeCommit":false,"messageTitle":"Change \u0027qty\u0027 naming and addIngredient() function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"06a8fc3adcbd4ecdb262d813b07285b18d470a95","isMergeCommit":false,"messageTitle":"Add exception and IngredientListTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0},"test-code":{"insertions":31,"deletions":0}}},{"hash":"3aa7bf85c7604d1b0927edad2f87672f09c841f7","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2},"test-code":{"insertions":0,"deletions":3}}},{"hash":"25c4d225243f0b7571e39e74aeefdf87fdce6bc3","isMergeCommit":false,"messageTitle":"Change import to correct format","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"ddfb2b196a0f5380863af3f10f9a689d30e96d93","isMergeCommit":true,"messageTitle":"Merge pull request #31 from StanleyW00/refactorAddRecipes","messageBody":"Refactor add recipes","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e7832c36ff1c6607371a6d41b1200997bfcb3854","isMergeCommit":true,"messageTitle":"Merge pull request #33 from kaijie0102/master","messageBody":"Fix bugs and merge conflicts","fileTypesAndContributionMap":{}},{"hash":"57096d1886b6e74cde0786059ef4ef25b03fd0d9","isMergeCommit":false,"messageTitle":"Add ingredient parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":46},"other":{"insertions":6,"deletions":9},"test-code":{"insertions":29,"deletions":2}}},{"hash":"af8dbd445b5bda4920c82164f168434903354368","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"feb3b6b8dad2cd21dfe94cf79972429da0428065","isMergeCommit":false,"messageTitle":"Resolve checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":6}}},{"hash":"754f337d20268d2b308c99f77c8cc954c7c755a0","isMergeCommit":true,"messageTitle":"Merge pull request #42 from charkty/parser/Ingredient","messageBody":"Add ingredient parser and edit Ui","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"934e0093cb12c72ed4f0abf069808da5067d9c56","isMergeCommit":true,"messageTitle":"Merge pull request #51 from StanleyW00/modify-logic-command","messageBody":"[Enhancement] Modify logic command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"9eda75c9cc09a7191362d46958b0e8fdf337df70","isMergeCommit":false,"messageTitle":"Add template for Developer and User Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":201,"deletions":12}}},{"hash":"0575003df7a547e9d30f1b6bd28ae33010d0c49c","isMergeCommit":true,"messageTitle":"Merge pull request #52 from StanleyW00/refactor-parser","messageBody":"Refactor parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"1a83a29c35a2908d5d0e3fd93c8dfcd3ae13471b","isMergeCommit":true,"messageTitle":"Merge pull request #59 from kaijie0102/master","messageBody":"Parser integration and enhancement of Ingredient class","fileTypesAndContributionMap":{}},{"hash":"f5866525c5ca4365951cdd89e71e9c15d3950432","isMergeCommit":false,"messageTitle":"Update features for user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":74,"deletions":3}}}]},{"date":"2023-10-26","commitResults":[{"hash":"21f2f24a20d8e185260f18739bc298516fd64b12","isMergeCommit":false,"messageTitle":"Create sequence diagram for help function","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":43,"deletions":0}}},{"hash":"68e79d8aaef5b66167526bf612879c8b4e7ddc70","isMergeCommit":false,"messageTitle":"Reformat","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":6}}},{"hash":"9e34856934552e225df6b8c96ad062d015c914ef","isMergeCommit":true,"messageTitle":"Merge pull request #64 from StanleyW00/add-new-recipe-diagram","messageBody":"Add new recipe diagram","fileTypesAndContributionMap":{}},{"hash":"65bf693b5b916e63b184ffd9302a2683e1b20928","isMergeCommit":false,"messageTitle":"Add showCommands() to sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"cf9a6619ca7afd707f5cf28f4bfe1a3082550f8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into documentation/developerGuide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"034c51e5b6852c41948861da715aaa064fa49f78","isMergeCommit":false,"messageTitle":"Create developer guide\u0027s help feature implementation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":7}}},{"hash":"c21aa1564aef1125063a3320fcb3a52f12342d85","isMergeCommit":false,"messageTitle":"Add Delete command in Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":2}}},{"hash":"aff6c22bbae4029740f693e6c50bcbec03923f09","isMergeCommit":true,"messageTitle":"Solve merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b6436b9f03fec96ec7c9259361bb694edd498aad","isMergeCommit":false,"messageTitle":"Create delete ingredient function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":106,"deletions":25},"test-code":{"insertions":2,"deletions":2}}},{"hash":"4de8da08513a047f4762b0ee493a99e489091ca3","isMergeCommit":false,"messageTitle":"Handle exceptions for delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":11}}},{"hash":"856a27fb0cfc917708e3701d659a41c2ace94622","isMergeCommit":false,"messageTitle":"Solve issues in delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":50,"deletions":40},"test-code":{"insertions":133,"deletions":0}}},{"hash":"f3d8ca29c8e5a7f88e3169d024043545c633632f","isMergeCommit":false,"messageTitle":"Clean up delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3},"test-code":{"insertions":0,"deletions":133}}},{"hash":"e7ce1eed6ccd66d9e17951ba37a3599b9d45a8cb","isMergeCommit":false,"messageTitle":"Add relevant imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":4}}},{"hash":"3f19c22122db10d4d155e722a6f469f5c510f2c7","isMergeCommit":false,"messageTitle":"Correct checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"0c4ecb8292c37c0551281a6a812dab75ad6d0207","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into feature/deleteIngredient","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3d10cafeea3ec35ff2b1d074822f196ae91a4428","isMergeCommit":false,"messageTitle":"Change checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":5}}},{"hash":"bbfd1d36d9e0a40a3002304d9c381f96f9da804b","isMergeCommit":false,"messageTitle":"Add delete command to start message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":12}}},{"hash":"d2704f80e2a20a8035dafb3c1fe641748a5612e6","isMergeCommit":false,"messageTitle":"Rectify long sentence","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"1726122f2f2cb3839caf48c407d2308ec539bc00","isMergeCommit":true,"messageTitle":"Merge pull request #68 from kaijie0102/branch-ingredient-qty-unit","messageBody":"Junit test to add multiple ingredients in one line","fileTypesAndContributionMap":{}},{"hash":"065b6372cc43931899da1f312369130313c21e22","isMergeCommit":false,"messageTitle":"Tidy showCommands() in Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":14}}},{"hash":"dc706dd319c03cb51b0343244e76552fa3b6dee8","isMergeCommit":false,"messageTitle":"Standardise everything to index","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":31}}},{"hash":"6c8ae679dc55ad19b0738416da300b09d0987f68","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0dedaf9ea6c7781cb66e89696e5f4a1a3e2981c1","isMergeCommit":true,"messageTitle":"Merge pull request #76 from kaijie0102/master","messageBody":"Update developer guide for viewing ingredients","fileTypesAndContributionMap":{}},{"hash":"a8908ee81fd9023042048bd8fc4e084379345bbb","isMergeCommit":false,"messageTitle":"Create exit sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":0}}},{"hash":"957260f4262da7513f655e8ac7587c65bd7b8529","isMergeCommit":false,"messageTitle":"Add steps for help feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":2}}},{"hash":"1763b6788b0ea138d9a178dfd7def1ec8bb366a6","isMergeCommit":false,"messageTitle":"Add steps for exit command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":0}}},{"hash":"03ae637bf4eba4c7ed3f500547ca3cfa5f88cf37","isMergeCommit":true,"messageTitle":"Merge pull request #77 from kaijie0102/master","messageBody":"Add sequence diagram for viewing all recipes and updating DG","fileTypesAndContributionMap":{}},{"hash":"d5f9312405b523e3e00a0f16cf247b11e4175bc9","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"74a474c6cf47c27fdbf1464e7d98e3200c8e9a02","isMergeCommit":true,"messageTitle":"Merge pull request #79 from kaijie0102/master","messageBody":"Improve view ingredients documentation","fileTypesAndContributionMap":{}},{"hash":"01589367b8bb1113cf91a8e40ca5ef0bf2ec534a","isMergeCommit":false,"messageTitle":"Add assertion and remove exception from RecipeList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":8}}},{"hash":"feb16d869bbfe387268f35b7eeeda42e9c59a29b","isMergeCommit":false,"messageTitle":"Shorten names of exception classes","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"8f5b7d64145348c06ca3194476e574047e457e7b","isMergeCommit":false,"messageTitle":"Refactor exception classes in other classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":57,"deletions":57},"test-code":{"insertions":72,"deletions":10}}},{"hash":"63b1adeda242eb21b19e205228401e18b8ca7f65","isMergeCommit":false,"messageTitle":"Add JU test for delete ingredient command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":24,"deletions":10}}},{"hash":"60e7f9f00528effbe2697855eaea0b57af143f77","isMergeCommit":false,"messageTitle":"Add JU Test for IngredientParser and remove unused exception in delete function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":12},"test-code":{"insertions":36,"deletions":5}}},{"hash":"e4eb6638051b73103aaa4b4e4ffb5f70b0c35961","isMergeCommit":false,"messageTitle":"Add JU test for Delete Recipe Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2},"test-code":{"insertions":75,"deletions":0}}},{"hash":"7ac1c9f5cbd06e7bfd80a4ac02f08d6279f78d8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into feature/delete","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"746d9b6022f007c11cb48cc35af633109e40aeff","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":1,"deletions":5}}},{"hash":"0e122d5253e5901139feb79b7d61c38786ccb88e","isMergeCommit":true,"messageTitle":"Merge pull request #83 from StanleyW00/second-half-ug","messageBody":"Update ingredient UG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"44950b10aa5f5b8412b618f68539bc446bb186bc","isMergeCommit":true,"messageTitle":"Merge pull request #89 from StanleyW00/bug-theme-pages","messageBody":"Fix pages bug","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kaijie0102":{"docs":192,"functional-code":518,"test-code":258},"Haoyuli2002":{"docs":82,"functional-code":88,"test-code":30},"StanleyW00":{"docs":122,"functional-code":297,"test-code":21,"other":1},"charkty":{"docs":377,"functional-code":361,"test-code":244,"other":2}},"authorContributionVariance":{"kaijie0102":21314.037,"Haoyuli2002":1135.3525,"StanleyW00":7539.0454,"charkty":27227.66},"authorDisplayNameMap":{"kaijie0102":"CS2113-F11-2 LEOW.. JIE","Haoyuli2002":"CS2113-F11-2 LI H..AOYU","StanleyW00":"CS2113-F11-2 STAN..JAYA","charkty":"CS2113-F11-2 CHAR..G YU"}} diff --git a/AY2324S1-CS2113-T17-1_tp_master/authorship.json b/AY2324S1-CS2113-T17-1_tp_master/authorship.json index d686e74..a5fe537 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":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: About Us","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"|-----------------------------------------------------------|:-----------------:|:----------------------------------------:|:-----------------------------------------:|","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"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":9,"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":10,"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":11,"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":12,"author":{"gitId":"skylee03"},"content":"| ![](https://avatars.githubusercontent.com/u/24489025?s\u003d100) | Yang Ming-Tian | [Github](https://github.com/skylee03) | [Portfolio](docs/team/skylee03.md) |","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"skylee03":5,"yicheng-toh":6,"-":2}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: Developer Guide","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"- Table of Contents","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"{:toc}","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"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":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"## Design","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"This section provides a high-level explanation of the design and implementation of AthletiCLI, ","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"supported by UML diagrams and short code snippets to illustrate the flow of data and interactions between the ","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"components.","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"#### [Implemented] Setting Up of Diet Goals","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"### Architecture","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"**Main components of the architecture**","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"**`AthletiCLI`** is in charge of the app launch and shut down.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":"The bulk of the AthletiCLI’s work is done by the following components, with each of them corresponds to a package:","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"* [`UI`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/ui): The UI of AthletiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"* [`Storage`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/storage): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"* [`Data`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/data): Holds the data of AthletiCLI in memory.","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"* [`Commands`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/commands): The command executors.","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"[`Exceptions`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/exceptions) represents exceptions used by multiple other components.","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"### UI Component","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":"### Storage Component","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"### Data Component","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":"### Commands Component","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"## Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"### Diet Management in AthletiCLI","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"#### [Implemented] Setting Up, Editing, Deleting, Listing, and Finding Diets","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":"Regardless of the operation you are performing on diets (setting up, editing, deleting, listing, or finding), the process follows a general five-step pattern in AthletiCLI:","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"1. **Input Processing**: The user\u0027s input is passed through AthletiCLI to the Parser Class. Examples of user inputs include:","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" - \"add-diet calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00\" for adding a diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" - \"edit-diet 1 calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00\" for editing a diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" - \"delete-diet 1\" for deleting a diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" - \"list-diet\" for listing all diets.","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" - \"find-diet 2021-09-01\" for finding diets of a particular date.","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":"2. **Command Identification**: The Parser Class identifies the type of diet operation and passes the necessary parameters.","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"3. **Command Creation**: An instance of the corresponding command class is created (e.g., AddDietCommand, EditDietCommand, etc.) and returned to AthletiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":"4. **Command Execution**: AthletiCLI executes the command, interacting with the data instance of DietList to perform the required operation.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"5. **Result Display**: A message is returned post-execution and passed through AthletiCLI to the UI for display to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":"By following these general steps, AthletiCLI ensures a streamlined process for managing diet-related tasks.","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":"### [Implemented] Setting Up of Diet Goals","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":"This following sequence diagram show how the \u0027set-diet-goal\u0027 command works:","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":"\u003cp align\u003d\"center\" width\u003d\"100%\"\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" \u003cimg width\u003d\"80%\" src\u003d\"images/setDietGoalUmlSequenceDiagram.svg\" alt\u003d\"\u0027set-diet-goal\u0027 Sequence Diagram\"/\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":"\u003c/p\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":"Step 1. The input from the user (\"set-diet-goal fats/1\") runs through AthletiCLI to the Parser Class.","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"yicheng-toh"},"content":"Step 2. The Parser Class will identify the request as setting up a diet goal and pass in the parameters","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"yicheng-toh"},"content":"\"fats/1\".","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"yicheng-toh"},"content":"Step 3. A temporary dietGoalList is created to store newly created diet goals.","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"yicheng-toh"},"content":"Step 4. The inputs are verified against our lists of approved diet goals.","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"yicheng-toh"},"content":"Step 5. For each of the diet goals that are valid, a dietGoal object will be created and stored in the ","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"yicheng-toh"},"content":"temporary dietGoalList.","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"yicheng-toh"},"content":"Step 6. The Parser then creates for an instance of SetDietGoalCommand and returns the instance to ","lastModifiedDate":"2023-10-24"},{"lineNumber":93,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI.","lastModifiedDate":"2023-10-24"},{"lineNumber":94,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"yicheng-toh"},"content":"Step 7. AthletiCLI will execute the SetDietGoalCommand. This adds the dietGoals that are present in the ","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"yicheng-toh"},"content":"temporary list into the data instance of DietGoalList which will be kept for records.","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"yicheng-toh"},"content":"Step 8. After executing the SetDietGoalCommand, SetDietGoalCommand returns a message that is passed to ","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI to be passed to UI(not shown) for display.","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"#### [Implemented] Adding activities","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":"The `add-activity` feature allows users to add a new activity into the application.","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":"These are the main components behind the architecture of the `add-activity` feature:","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"1. `AthletiCLI`: faciliates the mechanism. It captures the input and calls the parser and execution.","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"2. `Parser`: parses the user input and generates the appropriate command object and activity ","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" instance.","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"3. `AddActivityCommand`: encapsulates the execution of the `add-activity` command. It adds ","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" the activity to the data.","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"4. `Activity`: represents the activity that is to be added.","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"5. `Data`: holds current state of the activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"6. `ActivityList`: maintains the list of all added activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":"Given below is an example usage scenario and how the add mechanism behaves at each step.","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":"**Step 1 - Input Capture:** The user issues an `add-activity ...` which is captured and passed to the Parser by the ","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":"running AthletiCLI instance.","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"AlWo223"},"content":"**Step 2 - Activity Parsing:** The Parser parses the raw input to obtain the arguments of the activity. Given that all ","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"AlWo223"},"content":"parameters are provided correctly and no exception is thrown, a new activity object is created.","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"AlWo223"},"content":"**Step 3 - Command Parsing:** In addition the parser will create an `AddActivityCommand` object with the newly added ","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":"activity attached to it. The command implements the `AddActivityCommand#execute()` operation and is passed to ","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":"the AthletiCLI instance.","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":"**Step 4 - Activity Addition:** The AthletiCLI instance executes the `AddActivityCommand` object. The command will ","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":"access the data and retrieve the currently stored list of activities stored inside it. The new `Activity` object is ","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"AlWo223"},"content":"added to the list.","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":"**Step 5 - User Interaction:** Once the activity is successfully added, a confirmation message is displayed to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":"The following sequence diagram shows how the `add-activity` operation works:","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":"\u003cp align\u003d\"center\" width\u003d\"100%\"\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":" \u003cimg width\u003d\"80%\" src\u003d\"DeveloperGuide/AddActivity.png\" alt\u003d\"Sequence Diagram of add-activity`\"/\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":"\u003c/p\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"skylee03"},"content":"### [Proposed] Implementation of DietGoalList","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":138,"author":{"gitId":"yicheng-toh"},"content":"The current implementation of DietGoalList is an ArrayList.","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"yicheng-toh"},"content":"It helps to store dietGoals, however it is not efficient in searching for a particular dietGoal.","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"yicheng-toh"},"content":"At any instance of time, there could only be the existence of one dietGoal.","lastModifiedDate":"2023-10-24"},{"lineNumber":141,"author":{"gitId":"yicheng-toh"},"content":"Verifying if there is an existence of a dietGoal using an ArrayList takes O(n) time, where n is the number of dietGoals.","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"yicheng-toh"},"content":"The proposed change will be to change the underlying data structure to a hashmap for amortised O(1) time complexity","lastModifiedDate":"2023-10-24"},{"lineNumber":143,"author":{"gitId":"yicheng-toh"},"content":"for checking the presence of a dietGoal. ","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":145,"author":{"gitId":"DaDevChia"},"content":"### Sleep Management in AthletiCLI","lastModifiedDate":"2023-10-27"},{"lineNumber":146,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":147,"author":{"gitId":"DaDevChia"},"content":"#### [Implemented] Adding, Editing, Deleting, Listing Sleep","lastModifiedDate":"2023-10-27"},{"lineNumber":148,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":149,"author":{"gitId":"DaDevChia"},"content":"1. **Input Processing**: The user\u0027s input is passed through AthletiCLI to the Parser Class. Examples of user inputs include:","lastModifiedDate":"2023-10-27"},{"lineNumber":150,"author":{"gitId":"DaDevChia"},"content":" - \"add-sleep hours/8 datetime/2021-09-01 06:00\" for adding sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"DaDevChia"},"content":" - \"edit-sleep 1 hours/8 datetime/2021-09-01 06:00\" for editing sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"DaDevChia"},"content":" - \"delete-sleep 1\" for deleting sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"DaDevChia"},"content":" - \"list-sleep\" for listing all sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":154,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":155,"author":{"gitId":"DaDevChia"},"content":"2. **Command Identification**: The Parser Class identifies the type of sleep operation and passes the necessary parameters.","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"DaDevChia"},"content":"3. **Command Creation**: An instance of the corresponding command class is created (e.g., AddSleepCommand, EditSleepCommand, etc.) and returned to AthletiCLI.","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":159,"author":{"gitId":"DaDevChia"},"content":"4. **Command Execution**: AthletiCLI executes the command, interacting with the data instance of SleepList to perform the required operation.","lastModifiedDate":"2023-10-27"},{"lineNumber":160,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":161,"author":{"gitId":"DaDevChia"},"content":"5. **Result Display**: A message is returned post-execution and passed through AthletiCLI to the UI for display to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":165,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":166,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":168,"author":{"gitId":"DaDevChia"},"content":"AthletiCLI is designed for athletic individuals who are committed to optimizing their performance. ","lastModifiedDate":"2023-10-27"},{"lineNumber":169,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":170,"author":{"gitId":"DaDevChia"},"content":"These users are highly disciplined and engaged not only in regular, intense physical training but also in nutrition, mental conditioning, and recovery. ","lastModifiedDate":"2023-10-27"},{"lineNumber":171,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":172,"author":{"gitId":"DaDevChia"},"content":"They are looking for a holistic tool that integrates all facets of an athletic lifestyle. AthletiCLI serves as a daily or weekly companion, designed to monitor, track, and analyze various elements crucial for high-level athletic performance. ","lastModifiedDate":"2023-10-27"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":174,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":176,"author":{"gitId":"DaDevChia"},"content":"AthletiCLI provides a streamlined, integrated solution for athletic individuals focused on achieving peak performance. ","lastModifiedDate":"2023-10-27"},{"lineNumber":177,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":178,"author":{"gitId":"DaDevChia"},"content":"While the app includes robust capabilities for tracking physical training metrics, it also offers features for monitoring dietary habits and sleep metrics. ","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"DaDevChia"},"content":"By providing a comprehensive view of various performance-related factors over time, AthletiCLI enables athletes to identify trends, refine their training and lifestyle habits, and optimize outcomes. The app is more than a tracking tool—it\u0027s a performance optimization platform that takes into account the full spectrum of an athlete\u0027s life. ","lastModifiedDate":"2023-10-27"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":182,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":184,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":185,"author":{"gitId":"nihalzp"},"content":"|---------|-----------------------------------|-----------------------------------|----------------------------------------------------------------------------------------|","lastModifiedDate":"2023-10-26"},{"lineNumber":186,"author":{"gitId":"nihalzp"},"content":"| v1.0 | health-conscious user | add my dietary information | keep track of my daily calorie and nutrient intake |","lastModifiedDate":"2023-10-26"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":"| v1.0 | organized user | delete a dietary entry | remove outdated or incorrect data from my diet records |","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":"| v1.0 | fitness enthusiast | view all my diet records | have a clear overview of my dietary habits and make informed decisions on my diet |","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"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":190,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | motivated weight-conscious user | set diet goals | have the motivation to work towards keeping weight in check. |","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | forgetful user | see all my diet goals | remind myself of all the diet goals I have set. |","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | regretful user | remove my diet goals | I can rescind the strict goals I set previously when I find the goals too far fetched. |","lastModifiedDate":"2023-10-24"},{"lineNumber":193,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | motivated user | update my diet goals | I can work towards better version of myself by setting stricter goals. |","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | add my sleep information | keep track of my sleep habits and identify areas for improvement |","lastModifiedDate":"2023-10-27"},{"lineNumber":195,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | delete a sleep entry | remove outdated or incorrect data from my sleep records |","lastModifiedDate":"2023-10-27"},{"lineNumber":196,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | view all my sleep records | have a clear overview of my sleep habits and make informed decisions on my sleep |","lastModifiedDate":"2023-10-27"},{"lineNumber":197,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | edit my sleep entries | correct any mistakes or update my sleep information as needed |","lastModifiedDate":"2023-10-27"},{"lineNumber":198,"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":199,"author":{"gitId":"nihalzp"},"content":"| v2.0 | meticulous user | edit my dietary entries | correct any mistakes or update my diet information as needed |","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":201,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":202,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":204,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":"1. AthletiCLI should work on Windows, MacOS and Linux that has java 11 installed.","lastModifiedDate":"2023-10-24"},{"lineNumber":207,"author":{"gitId":"DaDevChia"},"content":"2. AthletiCLI should be able to store data locally.","lastModifiedDate":"2023-10-27"},{"lineNumber":208,"author":{"gitId":"DaDevChia"},"content":"3. AthletiCLI should be able to work offline.","lastModifiedDate":"2023-10-27"},{"lineNumber":209,"author":{"gitId":"DaDevChia"},"content":"4. AthletiCLI should be easy to use.","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":211,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":213,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":217,"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":{"skylee03":37,"DaDevChia":37,"AlWo223":39,"yicheng-toh":41,"-":35,"nihalzp":28}},{"path":"docs/DeveloperGuide/AddActivity.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"\u0027https://plantuml.com/sequence-diagram","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"skinparam Style strictuml","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"skinparam SequenceMessageAlignment center","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T1 #7777DB","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T2 #5252CE","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T4 #101086","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"participant \":AthletiCLI\" as AthletiCLI LOGIC_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"participant \":Parser\" as Parser #lightblue","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"participant \"a:Activity\" as Activity #yellow","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"participant \"c:AddActivityCommand\" as AddActivityCommand #lightgreen","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"participant \"data:Data\" as Data #lightgrey","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"participant \"activities:ActivityList\" as activities #lightgrey","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"AthletiCLI++","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"AthletiCLI -\u003e Parser++: parseCommand(userInput)","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"Parser -\u003e Parser++: parseActivity(arguments)","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"Parser -\u003e Activity++: Activity()","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"Activity --\u003e Parser--: a","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"Parser--","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"Parser -\u003e AddActivityCommand++: parseAddActivityCommand(arguments)","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand --\u003e Parser--: c","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"Parser --\u003e AthletiCLI--: c","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"AthletiCLI -\u003e AddActivityCommand++: execute(a, data)","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand -\u003e Data++: getActivities()","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"Data --\u003e activities++","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"activities --\u003e Data--: activities","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"Data --\u003e AddActivityCommand--: activities","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand -\u003e activities++: add(a)","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"activities --\u003e AddActivityCommand--","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand -\u003e AthletiCLI--: message","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"AlWo223":38}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"permalink: /","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"title: About AthletiCLI","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"feature_text: |","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" # AthletiCLI","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" Your all-in-one solution to track, analyse, and optimize your athletic performance.","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"feature_image: \"https://picsum.photos/1300/400?image\u003d989\"","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"[![](https://github.com/AY2324S1-CS2113-T17-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S1-CS2113-T17-1/tp/actions)","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"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":14,"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":15,"author":{"gitId":"nihalzp"},"content":"covers dietary habits, sleep metrics, and more.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"## Quick Start","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"* Ensure you have the required runtime environment installed on your computer.","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"* Download the latest AthletiCLI from the official repository.","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"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":22,"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":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"## Features","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"**Notes about Command Format**","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"* Words in UPPER_CASE are parameters provided by the user.","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"* Parameters can be in any order.","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"* Parameters enclosed in square brackets [] are optional.","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"## Activity Management","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"### Adding Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"`add-activity`, `add-run`, `add-swim`, `add-cycle`","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"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":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"* `add-activity CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"* `add-run CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"* `add-swim CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"* `add-cycle CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"* CAPTION: A short description of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"* DURATION: The duration of the activity in minutes.","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"* DISTANCE: The distance of the activity in meters. It must be a positive number.","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"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":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":"* `add-activity Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":"* `add-cycle Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":"### Deleting Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":"`delete-activity`","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"Accidentally added an activity? You can quickly delete activities by using the following command.","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"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":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"* `delete-activity INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity as shown in the displayed activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 2` deletes the second activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 1` deletes the first activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"### Listing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":"`list-activity`","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"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":84,"author":{"gitId":"AlWo223"},"content":"the detailed flag.","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"* `list-activity [-d]`","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":"**Flags:**","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"* `-d`: Shows a detailed list of activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":"* `list-activity` shows a brief overview of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":"* `list-activity -d` shows a detailed summary of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":"### Editing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"`edit-activity`, `edit-run`, `edit-swim`, `edit-cycle`","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":"You can edit your activities in AthletiCLI by editing the activity at the specified index.","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"* `edit-activity INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":"* `edit-run INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"* `edit-swim INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"* `edit-cycle INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity to be edited - must be a positive number","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":"* see adding activities for the other parameters","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"AlWo223"},"content":"* `edit-activity 1 Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"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":121,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":"### Setting Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":"\u0027set-activity-goal\u0027","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":"You can set goals for your activities in AthletiCLI by setting the target distance or duration for a specific sport.","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"AlWo223"},"content":"**Syntax**","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":"* `set-activity-goal sport/SPORT target/TARGET period/PERIOD value/VALUE`","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":"**Parameters**","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":"* SPORT: The sport for which you want to set a goal. It must be one of the following: run, swim, cycle, general.","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":"* TARGET: The target for which you want to set a goal. It must be one of the following: distance, duration.","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":"* VALUE: The value of the target. It must be a positive number. For distance, it is in meters. For duration, it is ","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"AlWo223"},"content":" in minutes.","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"AlWo223"},"content":"**Examples**","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"AlWo223"},"content":"* `set-activity-goal sport/running type/distance period/weekly target/10000` sets a goal of running 10km per week.","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"AlWo223"},"content":"* `set-activity-goal sport/swimming type/duration period/monthly target/120` sets a goal of swimming for 2 hours per ","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"AlWo223"},"content":" month.","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":"## Diet Management","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":"### Adding Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":"`add-diet`","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"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":150,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/CALORIES protein/PROTEIN carb/CARB fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal.","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"nihalzp"},"content":"### Deleting Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"nihalzp"},"content":"`delete-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"nihalzp"},"content":"You can delete your diet in AtheltiCLI by deleting the diet at the specified index.","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"nihalzp"},"content":"* `delete-diet INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be deleted - must be a positive integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"nihalzp"},"content":"* `delete-diet 1`","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"nihalzp"},"content":"### Listing Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"nihalzp"},"content":"`list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"nihalzp"},"content":"You can list all your diets in AtheltiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"yicheng-toh"},"content":"## Diet Goal Management","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":"### Adding Diet Goals:","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":"`set-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"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":204,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":"Currently only the following nutrients/metrics are tracked:","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"yicheng-toh"},"content":"1. Calories","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"yicheng-toh"},"content":"2. Protein","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"yicheng-toh"},"content":"3. Carbs","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"yicheng-toh"},"content":"4. Fats","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"yicheng-toh"},"content":"You can set multiple nutrients goals at once with the `set-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","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":"**Parameters:**","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":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"yicheng-toh"},"content":"* CARB: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","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":"You can create one or multiple nutrient goals at once with this command.","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":"","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"yicheng-toh"},"content":"Create multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"yicheng-toh"},"content":"Create a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500`","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"yicheng-toh"},"content":"### Deleting Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"yicheng-toh"},"content":"`delete-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"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":251,"author":{"gitId":"yicheng-toh"},"content":"This index will be referenced via `list-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"yicheng-toh"},"content":"* `delete-diet-goal INDEX`","lastModifiedDate":"2023-10-18"},{"lineNumber":258,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":259,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":260,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":261,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":262,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"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":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":"**Examples:**","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":"* `delete-diet-goal 1`","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":"### Listing Diet Goals:","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":"`list-diet-goals`","lastModifiedDate":"2023-10-18"},{"lineNumber":276,"author":{"gitId":"yicheng-toh"},"content":"You can list all your diet goals in AtheltiCLI.","lastModifiedDate":"2023-10-18"},{"lineNumber":277,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":278,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":279,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":280,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":281,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":282,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":283,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":284,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":285,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":286,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":287,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":288,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":289,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":290,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":291,"author":{"gitId":"yicheng-toh"},"content":"### Editing Diet Goals:","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-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":295,"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":296,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":297,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":298,"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":299,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":300,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":301,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":302,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":303,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":304,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":305,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":306,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":307,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":308,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":309,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":310,"author":{"gitId":"yicheng-toh"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":311,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":312,"author":{"gitId":"yicheng-toh"},"content":"* CARBS: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":313,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":314,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":315,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":316,"author":{"gitId":"yicheng-toh"},"content":"You can create one or multiple nutrient goals with this command.","lastModifiedDate":"2023-10-18"},{"lineNumber":317,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":318,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":319,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":320,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":321,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":322,"author":{"gitId":"yicheng-toh"},"content":"Edit multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":323,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000 protein/200 carb/500 fat/100`","lastModifiedDate":"2023-10-18"},{"lineNumber":324,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":325,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":326,"author":{"gitId":"yicheng-toh"},"content":"Edit a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":327,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000`","lastModifiedDate":"2023-10-18"},{"lineNumber":328,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":329,"author":{"gitId":"DaDevChia"},"content":"## Sleep Management","lastModifiedDate":"2023-10-17"},{"lineNumber":330,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":331,"author":{"gitId":"DaDevChia"},"content":"### Adding Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":332,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":333,"author":{"gitId":"DaDevChia"},"content":"**Command:** `add-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":334,"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":335,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":336,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":337,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":338,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":339,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":340,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":341,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":342,"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":343,"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":344,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":345,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":346,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":347,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/01-09-2021 22:00 end/02-09-2021 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":348,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":349,"author":{"gitId":"DaDevChia"},"content":"### Listing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":350,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":351,"author":{"gitId":"DaDevChia"},"content":"**Command:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":352,"author":{"gitId":"DaDevChia"},"content":"You can list all your sleep records in AtheltiCLI.","lastModifiedDate":"2023-10-17"},{"lineNumber":353,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":354,"author":{"gitId":"DaDevChia"},"content":"**Syntax:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":355,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":356,"author":{"gitId":"DaDevChia"},"content":"**Examples:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":357,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":358,"author":{"gitId":"DaDevChia"},"content":"### Deleting Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":359,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":360,"author":{"gitId":"DaDevChia"},"content":"**Command:** `delete-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":361,"author":{"gitId":"DaDevChia"},"content":"You can delete your sleep in AtheltiCLI by specifying the sleep\u0027s index.","lastModifiedDate":"2023-10-17"},{"lineNumber":362,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":363,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":364,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":365,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep INDEX`","lastModifiedDate":"2023-10-17"},{"lineNumber":366,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":367,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":368,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":369,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to delete.","lastModifiedDate":"2023-10-17"},{"lineNumber":370,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":371,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":372,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":373,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep 5` ","lastModifiedDate":"2023-10-17"},{"lineNumber":374,"author":{"gitId":"DaDevChia"},"content":" (Note: This will delete the 5th sleep record from your records.)","lastModifiedDate":"2023-10-17"},{"lineNumber":375,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":376,"author":{"gitId":"DaDevChia"},"content":"### Editing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":377,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":378,"author":{"gitId":"DaDevChia"},"content":"**Command:** `edit-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":379,"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":380,"author":{"gitId":"nihalzp"},"content":"end times.","lastModifiedDate":"2023-10-18"},{"lineNumber":381,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":382,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":383,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":384,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep INDEX start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":385,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":386,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":387,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":388,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to edit.","lastModifiedDate":"2023-10-17"},{"lineNumber":389,"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":390,"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":391,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":392,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":393,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":394,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep 5 start/05-09-2021 23:00 end/06-09-2021 07:00` ","lastModifiedDate":"2023-10-17"},{"lineNumber":395,"author":{"gitId":"DaDevChia"},"content":" (Note: This will edit the 5th sleep record to have the new specified timings.)","lastModifiedDate":"2023-10-17"},{"lineNumber":396,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":397,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":398,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":399,"author":{"gitId":"DaDevChia"},"content":"Remember, when using AtheltiCLI:","lastModifiedDate":"2023-10-17"},{"lineNumber":400,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":401,"author":{"gitId":"DaDevChia"},"content":"* Make sure to provide accurate dates and times.","lastModifiedDate":"2023-10-17"},{"lineNumber":402,"author":{"gitId":"DaDevChia"},"content":"* Double-check indexes before deleting or editing records to prevent mistakes.","lastModifiedDate":"2023-10-17"},{"lineNumber":403,"author":{"gitId":"DaDevChia"},"content":"* If you encounter any error messages, read them carefully to understand what went wrong.","lastModifiedDate":"2023-10-17"},{"lineNumber":404,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":405,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":407,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":408,"author":{"gitId":"AlWo223"},"content":"[User Guide](UserGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":409,"author":{"gitId":"AlWo223"},"content":"[Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":410,"author":{"gitId":"AlWo223"},"content":"[About Us](AboutUs.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":411,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":412,"author":{"gitId":"skylee03"},"content":"* If you are interested in using AthletiCLI, head over to the [User Guide](UserGuide.html).","lastModifiedDate":"2023-10-26"},{"lineNumber":413,"author":{"gitId":"skylee03"},"content":"* If you are interested about developing AthletiCLI, the [Developer Guide](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2023-10-26"},{"lineNumber":414,"author":{"gitId":"skylee03"},"content":"* If you would like to learn more about our development team, please visit the [About Us](AboutUs.html) page.","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"skylee03":13,"DaDevChia":75,"AlWo223":117,"yicheng-toh":133,"-":4,"nihalzp":72}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: User Guide","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"## Diet Management","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"### Adding Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"`add-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"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-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"* DATETIME: The date and time of the meal. It must follow the ISO Date Time Format: YYYY-MM-DD HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":"### Editing Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"`edit-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"You can edit your diet in AtheltiCLI by editing the diet at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":"* `edit-diet INDEX calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be edited - must be a positive integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"* DATETIME: The date and time of the meal. It must follow the ISO Date Time Format: YYYY-MM-DD HH:MM [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 datetime/2021-09-01 06:00 protein/20 carb/50 calories/500 fat/10`","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 calories/500`","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 protein/20`","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"### Deleting Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":"`delete-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":"You can delete your diet in AtheltiCLI by deleting the diet at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":"* `delete-diet INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be deleted - must be a positive integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":"* `delete-diet 1`","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":"### Listing Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":"`list-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"You can list all your diets in AtheltiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"skylee03":4,"-":19,"nihalzp":60}},{"path":"docs/UserGuideTmp.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: User Guide","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"## Quick Start","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"* Ensure you have the required runtime environment installed on your computer.","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"* Download the latest AthletiCLI from the official repository.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"* Copy the downloaded file to a folder you want to designate as the home for AthletiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"* Open a command terminal, cd into the folder where you copied the file, and run java -jar AthletiCLI.jar","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"## Features","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"**Notes about Command Format**","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"* Words in UPPER_CASE are parameters provided by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":"* Parameters can be in any order.","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"* Parameters enclosed in square brackets [] are optional.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":"## Activity Management","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"### Adding Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":"`add-activity`, `add-run`, `add-swim`, `add-cycle`","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"You can record your activities in AtheltiCLI by adding different activities including running, cycling, and swimming.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":"* `add-activity CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"* `add-run CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"* `add-swim CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"* `add-cycle CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"* CAPTION: A short description of the activity.","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"* DURATION: The duration of the activity in minutes.","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":"* DISTANCE: The distance of the activity in meters. It must be a positive number.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":"* `add-activity Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"* `add-cycle Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"### Deleting Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":"`delete-activity`","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":"Accidentally added an activity? You can quickly delete activities by using the following command.","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":"The index must be a positive number and is not larger than the number of activities recorded.","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":"* `delete-activity INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":"* INDEX: The index of the activity as shown in the displayed activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":"* `delete-activity 2` deletes the second activity in the activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":"* `delete-activity 1` deletes the first activity in the activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":"### Listing Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"`list-activity`","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":"the detailed flag.","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":"* `list-activity [-d]`","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":"**Flags:**","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":"* `-d`: Shows a detailed list of activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":"* `list-activity` shows a brief overview of all activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":"* `list-activity -d` shows a detailed summary of all activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":"### Editing Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":"`edit-activity`, `edit-run`, `edit-swim`, `edit-cycle`","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":"You can edit your activities in AthletiCLI by editing the activity at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"skylee03"},"content":"* `edit-activity INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"skylee03"},"content":"* `edit-run INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"skylee03"},"content":"* `edit-swim INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"skylee03"},"content":"* `edit-cycle INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":100,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"skylee03"},"content":"* INDEX: The index of the activity to be edited - must be a positive number","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"skylee03"},"content":"* see adding activities for the other parameters","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"skylee03"},"content":"* `edit-activity 1 Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"skylee03"},"content":"* `edit-cycle 2 Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"skylee03"},"content":"## Diet Goal Management","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"skylee03"},"content":"### Adding Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"skylee03"},"content":"`set-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":120,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"skylee03"},"content":"Currently only the following nutrients/metrics are tracked:","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"skylee03"},"content":"1. Calories","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"skylee03"},"content":"2. Protein","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"skylee03"},"content":"3. Carbs","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"skylee03"},"content":"4. Fats","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"skylee03"},"content":"You can set multiple nutrients goals at once with the `set-diet-goal` command.","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"skylee03"},"content":"* `set-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"skylee03"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"skylee03"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"skylee03"},"content":"* CARB: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"skylee03"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"skylee03"},"content":"You can create one or multiple nutrient goals at once with this command.","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":153,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":154,"author":{"gitId":"skylee03"},"content":"Create multiple nutrients goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":155,"author":{"gitId":"skylee03"},"content":"* `set-diet-goal calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-26"},{"lineNumber":156,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":157,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":158,"author":{"gitId":"skylee03"},"content":"Create a single calories goal:","lastModifiedDate":"2023-10-26"},{"lineNumber":159,"author":{"gitId":"skylee03"},"content":"* `set-diet-goal calories/500`","lastModifiedDate":"2023-10-26"},{"lineNumber":160,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":161,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":162,"author":{"gitId":"skylee03"},"content":"### Deleting Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":163,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":164,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":165,"author":{"gitId":"skylee03"},"content":"`delete-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":166,"author":{"gitId":"skylee03"},"content":"You can delete your diet goals in AtheltiCLI by deleting the goal at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":167,"author":{"gitId":"skylee03"},"content":"This index will be referenced via `list-diet-goal` command.","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":169,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":170,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"skylee03"},"content":"* `delete-diet-goal INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":176,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":179,"author":{"gitId":"skylee03"},"content":"* INDEX: The index of the diet goal to be deleted. It must be a positive integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":180,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":182,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":183,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":185,"author":{"gitId":"skylee03"},"content":"* `delete-diet-goal 1`","lastModifiedDate":"2023-10-26"},{"lineNumber":186,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":187,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"skylee03"},"content":"### Listing Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":190,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"skylee03"},"content":"`list-diet-goals`","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"skylee03"},"content":"You can list all your diet goals in AtheltiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":193,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":194,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":195,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"skylee03"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":204,"author":{"gitId":"skylee03"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":205,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":207,"author":{"gitId":"skylee03"},"content":"### Editing Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":208,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":209,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":210,"author":{"gitId":"skylee03"},"content":"`edit-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"skylee03"},"content":"You can edit the target value of your diet goals in AtheltiCLI, redefining the target value for the specified nutrient.","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":215,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"skylee03"},"content":"* `edit-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"skylee03"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"skylee03"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"skylee03"},"content":"* CARBS: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"skylee03"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"skylee03"},"content":"You can create one or multiple nutrient goals with this command.","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":235,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":236,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":237,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":238,"author":{"gitId":"skylee03"},"content":"Edit multiple nutrients goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":239,"author":{"gitId":"skylee03"},"content":"* `edit-diet-goal calories/5000 protein/200 carb/500 fat/100`","lastModifiedDate":"2023-10-26"},{"lineNumber":240,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":241,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":242,"author":{"gitId":"skylee03"},"content":"Edit a single calories goal:","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"skylee03"},"content":"* `edit-diet-goal calories/5000`","lastModifiedDate":"2023-10-26"},{"lineNumber":244,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"skylee03"},"content":"## Sleep Management","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"skylee03"},"content":"### Adding Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"skylee03"},"content":"**Command:** `add-sleep` ","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"skylee03"},"content":"You can record your sleep timings in AtheltiCLI by adding your sleep start and end time.","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"skylee03"},"content":"* `add-sleep start/START end/END`","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":256,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"skylee03"},"content":"* START: The start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"skylee03"},"content":"* END: The end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":263,"author":{"gitId":"skylee03"},"content":"* `add-sleep start/01-09-2021 22:00 end/02-09-2021 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":264,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"skylee03"},"content":"### Listing Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"skylee03"},"content":"**Command:** `list-sleep`","lastModifiedDate":"2023-10-26"},{"lineNumber":268,"author":{"gitId":"skylee03"},"content":"You can list all your sleep records in AtheltiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":269,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"skylee03"},"content":"**Syntax:** `list-sleep`","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"skylee03"},"content":"**Examples:** `list-sleep`","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"skylee03"},"content":"### Deleting Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":275,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":276,"author":{"gitId":"skylee03"},"content":"**Command:** `delete-sleep` ","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"skylee03"},"content":"You can delete your sleep in AtheltiCLI by specifying the sleep\u0027s index.","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":281,"author":{"gitId":"skylee03"},"content":"* `delete-sleep INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"skylee03"},"content":"* INDEX: The integer index of the sleep record you wish to delete.","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"skylee03"},"content":"* `delete-sleep 5` ","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"skylee03"},"content":" (Note: This will delete the 5th sleep record from your records.)","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"skylee03"},"content":"### Editing Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"skylee03"},"content":"**Command:** `edit-sleep` ","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":296,"author":{"gitId":"skylee03"},"content":"end times.","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":298,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":299,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"skylee03"},"content":"* `edit-sleep INDEX start/START end/END`","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"skylee03"},"content":"* INDEX: The integer index of the sleep record you wish to edit.","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"skylee03"},"content":"* START: The new start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"skylee03"},"content":"* END: The new end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":308,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":309,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":310,"author":{"gitId":"skylee03"},"content":"* `edit-sleep 5 start/05-09-2021 23:00 end/06-09-2021 07:00` ","lastModifiedDate":"2023-10-26"},{"lineNumber":311,"author":{"gitId":"skylee03"},"content":" (Note: This will edit the 5th sleep record to have the new specified timings.)","lastModifiedDate":"2023-10-26"},{"lineNumber":312,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":313,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":314,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":315,"author":{"gitId":"skylee03"},"content":"Remember, when using AtheltiCLI:","lastModifiedDate":"2023-10-26"},{"lineNumber":316,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":317,"author":{"gitId":"skylee03"},"content":"* Make sure to provide accurate dates and times.","lastModifiedDate":"2023-10-26"},{"lineNumber":318,"author":{"gitId":"skylee03"},"content":"* Double-check indexes before deleting or editing records to prevent mistakes.","lastModifiedDate":"2023-10-26"},{"lineNumber":319,"author":{"gitId":"skylee03"},"content":"* If you encounter any error messages, read them carefully to understand what went wrong.","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"skylee03":319}},{"path":"docs/puml/DietGoals.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"\u0027https://plantuml.com/sequence-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"skinparam Style strictuml","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"skinparam SequenceMessageAlignment center","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"participant \":AthletiCLI\" as AthletiCLI #lightblue","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"participant \":Parser\" as Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"participant \":dietGoal\" as dietGoal","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"participant \":SetDietGoalCommand\" as SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"participant \"temp:dietGoalList\" as tempDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"participant \"data:dietGoalList\" as dataDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"\u0027autonumber","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI++","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI -\u003e Parser++ : ParseCommand(\"set-diet-goal fats/1\")","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"Parser -\u003e Parser++ : ParseDietGoalSetEdit(\"fats/1\")","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"create tempDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"Parser -\u003e tempDietGoalList++ : dietGoalList()","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"tempDietGoalList --\u003e Parser-- : dietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" loop number of valid new diet goals","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" create dietGoal","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" Parser -\u003e dietGoal++ : dietGoal()","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" dietGoal --\u003e Parser-- : dietGoal","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" end","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":"Parser --\u003e Parser-- : dietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":"create SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"Parser -\u003e SetDietGoalCommand++ : SetDietGoalCommand()","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":"SetDietGoalCommand --\u003e Parser-- : SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"Parser --\u003e AthletiCLI-- : SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI -\u003e SetDietGoalCommand++ : execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"SetDietGoalCommand -\u003e dataDietGoalList++ : add()","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":"dataDietGoalList --\u003e SetDietGoalCommand--","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":"destroy tempDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":"SetDietGoalCommand --\u003e AthletiCLI-- : messages","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":"destroy SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"yicheng-toh":39}},{"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":" private AthletiCLI() {","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-25"},{"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":" private void run() {","lastModifiedDate":"2023-10-25"},{"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/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.activity.FindActivityCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.diet.FindDietCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.sleep.FindSleepCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" protected LocalDate date;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" public FindCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * Returns the records to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" * @return The records to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" var activities \u003d Stream.of(new FindActivityCommand(date).execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" var diets \u003d Stream.of(new FindDietCommand(date).execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" var sleeps \u003d Stream.of(new FindSleepCommand(date).execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" return Stream.of(activities, diets, sleeps)","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" .reduce(Stream::concat)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .orElseGet(Stream::empty)","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":36}},{"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":" Message.HELP_FIND_ACTIVITY,","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" \"\\nDiet Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" Message.HELP_FIND_DIET,","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" \"\\nSleep Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" Message.HELP_FIND_SLEEP,","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" \"\\nMisc:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" Message.HELP_FIND,","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" Message.HELP_SAVE,","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" Message.HELP_BYE,","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" Message.HELP_HELP,","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" \"\\n\" + Message.HELP_DETAILS","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" };","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" private static final Map\u003cString, String\u003e HELP_MESSAGES \u003d Map.ofEntries(","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY, Message.HELP_ADD_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN, Message.HELP_ADD_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM, Message.HELP_ADD_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE, Message.HELP_ADD_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_DELETE, Message.HELP_DELETE_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_LIST, Message.HELP_LIST_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_EDIT, Message.HELP_EDIT_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN_EDIT, Message.HELP_EDIT_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM_EDIT, Message.HELP_EDIT_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE_EDIT, Message.HELP_EDIT_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_FIND, Message.HELP_FIND_ACTIVITY),","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_ADD, Message.HELP_ADD_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" entry(CommandName.COMMAND_DIET_EDIT, Message.HELP_EDIT_DIET),","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_DELETE, Message.HELP_DELETE_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_LIST, Message.HELP_LIST_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_FIND, Message.HELP_FIND_DIET),","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_ADD, Message.HELP_ADD_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_LIST, Message.HELP_LIST_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_DELETE, Message.HELP_DELETE_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_EDIT, Message.HELP_EDIT_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_FIND, Message.HELP_FIND_SLEEP),","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_FIND, Message.HELP_FIND),","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SAVE, Message.HELP_SAVE),","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_BYE, Message.HELP_BYE),","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_HELP, Message.HELP_HELP)","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" private String command;","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" public HelpCommand(String command) {","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" this.command \u003d command;","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" * Returns the help messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"skylee03"},"content":" if (HELP_MESSAGES.containsKey(command)) {","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"skylee03"},"content":" return new String[] {\"Usage: \" + HELP_MESSAGES.get(command)};","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"skylee03"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"skylee03"},"content":" return HELP_ALL;","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"skylee03":99,"nihalzp":1}},{"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":" activities.sort();","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" int size \u003d activities.size();","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String countMessage;","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" if (size \u003e 1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d String.format(Message.MESSAGE_ACTIVITY_COUNT, size);","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d Message.MESSAGE_ACTIVITY_FIRST;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_ADDED, this.activity.toString(), countMessage};","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":40}},{"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/FindActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class FindActivityCommand extends FindCommand {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" public FindActivityCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" super(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Returns the activities matching the date to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" var resultStream \u003d data.getActivities()","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" .find(date)","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" .stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" .filter(Activity.class::isInstance)","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" .map(Activity.class::cast)","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" .map(Activity::toString);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" return Stream.concat(Stream.of(Message.MESSAGE_ACTIVITY_FIND), resultStream)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":35}},{"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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" * Prints the list of activities.","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" * @param activities The current activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" * @param size The size of the activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" * @return The message containing listing of activities which will be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" public String[] printList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d (i+1) + \".\" + activities.get(i).toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * Prints the detailed list of activities.","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * @param activities The current activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * @param size The size of the activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" * @return The message containing listing of activities which will be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public String[] printDetailedList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d activities.get(i).toDetailedString();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":64}},{"path":"src/main/java/athleticli/commands/activity/SetActivityGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoalList;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"public class SetActivityGoalCommand extends Command {","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" private final ActivityGoal activityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" * Constructor for SetActivityGoalCommand.","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" * @param activityGoal Activity goal to be added.","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" public SetActivityGoalCommand(ActivityGoal activityGoal){","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" this.activityGoal \u003d activityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * Updates the activity goal list.","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param data The current data containing the activity goal list.","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" ActivityGoalList activityGoals \u003d data.getActivityGoals();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" activityGoals.add(this.activityGoal);","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_GOAL_ADDED, this.activityGoal.toString(data)};","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"AlWo223":31}},{"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":" assert index \u003e 0 : \"Index cannot be less than 1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" this.index \u003d index;","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":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" DietList dietList \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" int size \u003d dietList.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" if (index \u003e size) {","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_INVALID_DIET_INDEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" Diet oldDiet \u003d dietList.get(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" dietList.remove(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_DELETED, oldDiet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" String.format(Message.MESSAGE_DIET_COUNT, size - 1)};","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":43}},{"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 have the value of 1 minimally.\";","lastModifiedDate":"2023-10-23"},{"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 (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-23"},{"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/EditDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Parameter;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Parser;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" * Executes the edit diet command provided by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"public class EditDietCommand extends Command {","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private final int index;","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private final HashMap\u003cString, String\u003e dietMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" * Constructor for EditDietCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" * @param index Index of the diet to be edited.","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * @param dietMap Updated Diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" public EditDietCommand(int index, HashMap\u003cString, String\u003e dietMap) {","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" assert index \u003e 0 : \"Index should be greater than 0\";","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assert !dietMap.isEmpty() : \"Diet map should not be empty\";","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" this.dietMap \u003d dietMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" * Executes the edit diet command.","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" * @param data Data object containing the current list of diets.","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" * @return String array containing the messages to be printed to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException If the index provided is out of bounds.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" DietList diets \u003d data.getDiets();","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" int size \u003d diets.size();","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" if (index \u003e size) {","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_INVALID_DIET_INDEX);","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" Diet oldDiet \u003d diets.get(index - 1);","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" for (String key : dietMap.keySet()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" assert !java.util.Objects.equals(dietMap.get(key), \"\") : \"Diet parameter should not be empty\";","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" switch (key) {","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" case Parameter.CALORIES_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" oldDiet.setCalories(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" case Parameter.PROTEIN_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" oldDiet.setProtein(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" case Parameter.CARB_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" oldDiet.setCarb(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" case Parameter.FAT_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" oldDiet.setFat(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" case Parameter.DATETIME_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" LocalDateTime dateTime \u003d Parser.parseDateTime(dietMap.get(key));","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" oldDiet.setDateTime(dateTime);","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" default:","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" diets.set(index - 1, oldDiet);","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_UPDATED, oldDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"nihalzp":76}},{"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/FindDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" * Finds diets matching the date.","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"public class FindDietCommand extends FindCommand {","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" public FindDietCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" super(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * Returns the diets matching the date to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" var resultStream \u003d data.getDiets()","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" .find(date)","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" .stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .filter(Diet.class::isInstance)","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" .map(Diet.class::cast)","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" .map(Diet::toString);","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" return Stream.concat(Stream.of(Message.MESSAGE_DIET_FIND), resultStream)","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":35,"nihalzp":4}},{"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/FindSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class FindSleepCommand extends FindCommand {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" public FindSleepCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" super(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Returns the sleeps matching the date to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" var resultStream \u003d data.getSleeps()","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" .find(date)","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" .stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" .filter(Sleep.class::isInstance)","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" .map(Sleep.class::cast)","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" .map(Sleep::toString);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" return Stream.concat(Stream.of(Message.MESSAGE_SLEEP_FIND), resultStream)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":35}},{"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/Findable.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public interface Findable {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" * Returns a list of objects matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * @return A list of objects matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date);","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":14}},{"path":"src/main/java/athleticli/data/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" * Defines the basic fields and methods for a goal.","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public abstract class Goal {","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" * Defines different types of timespans.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" public enum Timespan {","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" DAILY(1),","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" WEEKLY(7),","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" MONTHLY(30),","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" YEARLY(365);","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" private final long days;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" Timespan(long days) {","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" this.days \u003d days;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * Returns the number of days in the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" * @return The number of days in the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public long getDays() {","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" return days;","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" private Timespan timespan;","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" public Goal(Timespan timespan) {","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" this.timespan \u003d timespan;","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" * Returns the timespan of this goal.","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" * @return The timespan of this goal.","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" public Timespan getTimespan() {","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" return timespan;","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" * Checks whether the date is between the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" * @param timespan The timespan of the goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" * @return Whether the date is between the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" public static boolean checkDate(LocalDate date, Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" final LocalDate endDate \u003d LocalDate.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" final LocalDate startDate \u003d endDate.minusDays(timespan.getDays() - 1);","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" return !(date.isBefore(startDate) || date.isAfter(endDate));","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" * Returns whether the goal is achieved.","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" * @param data The current data containing all records.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" * @return Whether the goal is achieved.","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" public abstract boolean isAchieved(Data data);","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"skylee03":67,"AlWo223":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.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" * Represents a physical activity consisting of basic sports data.","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" public static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMMM d, \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" \"yyyy \u0027at\u0027 h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" public static final DateTimeFormatter TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"HH:mm:ss\",","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" Locale.ENGLISH);","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final int columnWidth \u003d 40;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private String description;","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private final String caption;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private final LocalTime movingTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" private final int distance;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" private int calories;","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" private final LocalDateTime startDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" * Generates a new general sports activity with some basic stats.","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public Activity(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime) {","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" this.movingTime \u003d movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" this.distance \u003d distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" this.caption \u003d caption;","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" public LocalTime getMovingTime() {","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" return movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" public int getDistance() {","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" return distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" public String getCaption() {","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" return caption;","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" public LocalDateTime getStartDateTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" return startDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" return this.calories;","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" public int getColumnWidth() {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" return columnWidth;","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the activity","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateShortMovingTimeStringOutput();","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" return \"[Activity] \" + caption + \" | \" + distanceOutput + \" | \" + movingTimeOutput + \" | \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" startDateTimeOutput;","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" * Returns distance in user-friendly output format.","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the distance","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" public String generateDistanceStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" double distanceInKm \u003d distance / 1000.0;","lastModifiedDate":"2023-10-13"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" return \"Distance: \" + String.format(Locale.ENGLISH, \"%.2f\", distanceInKm)","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" + \" km\";","lastModifiedDate":"2023-10-13"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" * Returns moving time in user-friendly output format.","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the moving time","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" public String generateMovingTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" return \"Time: \" + movingTime.format(TIME_FORMATTER);","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" * Returns a short representation of the moving time with the format depending on the duration.","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the moving time","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" public String generateShortMovingTimeStringOutput() {","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-10-24"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" if (movingTime.getHour() \u003e 0) {","lastModifiedDate":"2023-10-24"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" output +\u003d movingTime.getHour() + \"h \" + movingTime.getMinute() + \"m\";","lastModifiedDate":"2023-10-24"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-24"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" output +\u003d movingTime.getMinute() + \"m \" + movingTime.getSecond() + \"s\";","lastModifiedDate":"2023-10-24"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" return \"Time: \" + output;","lastModifiedDate":"2023-10-24"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":" * Returns start date and time in user-friendly output format.","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the start date and time","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":" public String generateStartDateTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":" return startDateTime.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-24"},{"lineNumber":118,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the activity.","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the activity","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Activity - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tCalories: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", \"...\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"AlWo223"},"content":" * Formats two strings into two columns of equal width.","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"AlWo223"},"content":" * @param left String to be placed in the left column","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"AlWo223"},"content":" * @param right String to be placed in the right column","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"AlWo223"},"content":" * @param columnWidth width of each column","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"AlWo223"},"content":" * @return a formatted string with two columns of equal width","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"AlWo223"},"content":" public String formatTwoColumns(String left, String right, int columnWidth) {","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%-\" + columnWidth + \"s%s\", left, right);","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":147,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"AlWo223":142}},{"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":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"public class ActivityGoal extends Goal implements Serializable {","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" public enum GoalType {","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DURATION // can be extended","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" public enum Sport {","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" RUNNING, CYCLING, SWIMMING, GENERAL","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private int targetValue;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private final GoalType goalType;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private final Sport sport;","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * Constructs an activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param timespan The timespan of the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * @param goalType The goal type of the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * @param sport The sport of the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @param targetValue The target value of the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public ActivityGoal(Timespan timespan, GoalType goalType, Sport sport, int targetValue) {","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" super(timespan);","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" this.goalType \u003d goalType;","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" this.sport \u003d sport;","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" * Examines whether the activity goal is achieved.","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" * @param data The data containing the activity list.","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" * @return Whether the activity goal is achieved.","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" public boolean isAchieved(Data data) throws IllegalStateException {","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" int total \u003d getCurrentValue(data);","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" return total \u003e\u003d targetValue;","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" * Returns the current value of the activity goal metric.","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" * @param data The data containing the activity list.","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" * @return The current value of the activity goal metric.","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" public int getCurrentValue(Data data) throws IllegalStateException {","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" Class\u003c?\u003e activityClass \u003d getActivityClass();","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" int total;","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" switch(goalType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" case DISTANCE:","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" total \u003d activities.getTotalDistance(activityClass, this.getTimespan());","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" case DURATION:","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" total \u003d activities.getTotalDuration(activityClass, this.getTimespan());","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" total \u003d total / 60;","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" throw new IllegalStateException(\"Unexpected value: \" + goalType);","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" return total;","lastModifiedDate":"2023-10-27"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public void setTargetValue(int targetValue) {","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" * Returns the class of the activity associated with the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" * @return The class of the activity.","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" public Class\u003c?\u003e getActivityClass() {","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" switch (this.sport) {","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" case RUNNING:","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" return Run.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" case CYCLING:","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" return Cycle.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" case SWIMMING:","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" return Swim.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" return Activity.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" * Returns the string representation of the activity goal including progress information.","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" * @return The string representation of the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" public String toString(Data data) {","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" String goalTypeString \u003d goalType.name();","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" String sportString \u003d sport.name();","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" return (getTimespan().name().toLowerCase() + \" \" + sportString.toLowerCase() + \" \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" goalTypeString.toLowerCase() + \": \" + getCurrentValue(data) + \" / \" + targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" public GoalType getGoalType() {","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" return goalType;","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" public Sport getSport() {","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" return sport;","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" public int getTargetValue() {","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":" return targetValue;","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":5,"AlWo223":108}},{"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.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Findable;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class ActivityList extends ArrayList\u003cActivity\u003e implements Serializable, Findable {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * Returns a list of activities matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * @return A list of activities matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cObject\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : this) {","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" if (activity.getStartDateTime().toLocalDate().equals(date)) {","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" result.add(activity);","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * Sorts the activities in the list by date.","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" public void sort() {","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" this.sort(Comparator.comparing(Activity::getStartDateTime).reversed());","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" * Returns a list of activities within the timespan.","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" * @param timespan The timespan to be matched.","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" * @return A list of activities within the timespan.","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public ArrayList\u003cActivity\u003e filterByTimespan(Goal.Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : this) {","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" LocalDate activityDate \u003d activity.getStartDateTime().toLocalDate();","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" if (Goal.checkDate(activityDate, timespan)) {","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" result.add(activity);","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * Returns the total distance of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * @param activityClass The activity class to be matched.","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * @return The total distance of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public int getTotalDistance(Class\u003c?\u003e activityClass, Goal.Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e filteredActivities \u003d filterByTimespan(timespan);","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" int runningDistance \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : filteredActivities) {","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" if (activityClass.isInstance(activity)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" runningDistance +\u003d activity.getDistance();","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" return runningDistance;","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" * Returns the total moving time in seconds of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" * @param activityClass The activity class to be matched.","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" * @return The total moving time of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" public int getTotalDuration(Class\u003c?\u003e activityClass, Goal.Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e filteredActivities \u003d filterByTimespan(timespan);","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" int movingTime \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : filteredActivities) {","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" if (activityClass.isInstance(activity)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d activity.getMovingTime();","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" movingTime +\u003d duration.getHour() * 3600 + duration.getMinute() * 60 + duration.getSecond();","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" return movingTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":19,"AlWo223":67}},{"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":"import java.util.Locale;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" * Represents a cycling activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"public class Cycle extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private final double averageSpeed;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * Generates a new cycling activity with cycling specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public Cycle(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" this.averageSpeed \u003d this.calculateAverageSpeed();","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * Calculates the average speed of the cycle in km/h.","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" * @return average speed of the cycle in km/h","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public double calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double dist \u003d (double) this.getDistance();","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime().toSecondOfDay() / 3600;","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" return (dist/1000) / time;","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the cycling activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the cycle","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"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]\", \"[Cycle]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d generateSpeedStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Speed: \" + speedOutput + \" | 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-17"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * Returns a string representation of the average speed of the cycle.","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the average speed of the cycle","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public String generateSpeedStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" return String.format(Locale.ENGLISH, \"%.2f\", this.averageSpeed) + \" km/h\";","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the cycle.","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the cycle","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d generateSpeedStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Cycle - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\t\" + movingTimeOutput, \"Avg Speed: \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" speedOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Max Speed: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" \"tbd\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" public int getElevationGain() {","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" return this.elevationGain;","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":86}},{"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":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" * Represents a running activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Run extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final double averagePace;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private final int steps;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * Generates a new running activity with running specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public Run(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" this.averagePace \u003d this.calculateAveragePace();","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" this.steps \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * Calculates the average pace of the run in minutes per km.","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" * @return average pace of the run in minutes per km","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public double calculateAveragePace() {","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime().toSecondOfDay() / 60;","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" double distance \u003d (double) this.getDistance() / 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" return time / distance;","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" * Converts the average pace of the run to the user-friendly format mm:ss.","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" * @return average pace of run in mm:ss format","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public String convertAveragePaceToString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" int totalSeconds \u003d (int) Math.round(this.averagePace*60);","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" int minutes \u003d totalSeconds / 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" int seconds \u003d totalSeconds % 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%d:%02d\", minutes, seconds);","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the running activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the run","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Run]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" String paceOutput \u003d this.convertAveragePaceToString() + \" /km\";","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Pace: \" + paceOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the run.","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the run","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String paceOutput \u003d this.convertAveragePaceToString() + \" /km\";","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Run - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, \"Avg Pace: \" + paceOutput,","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tMoving Time: \" + movingTimeOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Steps: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" this.steps, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","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 int getElevationGain() {","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" return elevationGain;","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":91}},{"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":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" * Represents a swimming activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Swim extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final int laps;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final SwimmingStyle style;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private final int averageLapTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" public enum SwimmingStyle {","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" BUTTERFLY,","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" BACKSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" BREASTSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" FREESTYLE","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * Generates a new swimming activity with swimming specific stats.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * averageLapTime is calculated automatically based on the movingTime and laps.","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in HH:mm:ss format","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" * @param style swimming style","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public Swim(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime, SwimmingStyle style) {","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" this.laps \u003d this.calculateLaps();","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" this.style \u003d style;","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" this.averageLapTime \u003d this.calculateAverageLapTime();","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" * Calculates the average lap time in seconds.","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" * @return average lap time in seconds","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" public int calculateAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" return this.getMovingTime().toSecondOfDay() / this.laps;","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" * Calculates the number of laps.","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" * @return number of laps","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" public int calculateLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" return this.getDistance() / 50;","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" public int getLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" return laps;","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public int getAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" return averageLapTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" * Returns a short string representation of the swim.","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the swim","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Swim]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String averageLapTimeOutput \u003d this.averageLapTime + \"s\";","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Avg Lap Time: \" + averageLapTimeOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the swim.","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the swim","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Swim - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tLaps: \" + this.getLaps(), \"Style: \"","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" + this.getStyle(), columnWidth);","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tAvg Lap Time: \" + averageLapTime + \" s\", \"Calories: \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" public SwimmingStyle getStyle() {","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" return style;","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":98}},{"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":"nihalzp"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" * Defines the basic fields and methods of a diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"public class Diet implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" public static final DateTimeFormatter DATE_TIME_FORMATTER \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" DateTimeFormatter.ofPattern(\"MMMM d, \" + \"yyyy \u0027at\u0027 h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private int calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private int protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private int carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private int fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" * Constructs a \u003ccode\u003eDiet\u003c/code\u003e object.","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" * @param dateTime The date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" public Diet(int calories, int protein, int carb, int fat, LocalDateTime dateTime) {","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assert calories \u003e\u003d 0 : \"Calories cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" assert protein \u003e\u003d 0 : \"Protein cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" assert carb \u003e\u003d 0 : \"Carb cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" assert fat \u003e\u003d 0 : \"Fat cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","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":" * Returns the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" * @return The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" return calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" }","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":" * Sets the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" public void setCalories(int calories) {","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" assert calories \u003e\u003d 0 : \"Calories cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" * Returns the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" * @return Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" public int getProtein() {","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" return protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" * Sets the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" public void setProtein(int protein) {","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" assert protein \u003e\u003d 0 : \"Protein cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" * Returns the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" * @return Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" public int getCarb() {","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" return carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" * Sets the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" public void setCarb(int carb) {","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" assert carb \u003e\u003d 0 : \"Carb cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" * Returns the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" * @return Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" public int getFat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" return fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" * Sets the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" public void setFat(int fat) {","lastModifiedDate":"2023-10-14"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" assert fat \u003e\u003d 0 : \"Fat cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" * Returns the date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" * @return The date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" return dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":" * Sets the date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" * @param dateTime The date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":" public void setDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" return \"Calories: \" + calories + \" Protein: \" + protein + \" Carb: \" + carb + \" Fat: \" + fat +","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" \" Date: \" + dateTime.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":146,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"nihalzp":140}},{"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":"nihalzp"},"content":"import athleticli.data.Findable;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"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":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diets.","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"public class DietList extends ArrayList\u003cDiet\u003e implements Serializable, Findable {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" public DietList() {","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" super();","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" }","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":" * Returns a string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" result.append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" * Returns a list of diets matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" * @return A list of diets matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" ArrayList\u003cObject\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" for (Diet diet : this) {","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" if (diet.getDateTime().toLocalDate().equals(date)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" result.add(diet);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" return result;","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":19,"nihalzp":35}},{"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.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"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":"import athleticli.data.Findable;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":" * Represents a list of sleep records.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"public class SleepList extends ArrayList\u003cSleep\u003e implements Findable {","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * Returns a list of sleeps matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * @return A list of sleeps matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":20,"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":"skylee03"},"content":" public static final String COMMAND_FIND \u003d \"find\";","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_ADD \u003d \"add-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_EDIT \u003d \"edit-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_DELETE \u003d \"delete-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_LIST \u003d \"list-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_SLEEP_FIND \u003d \"find-sleep\";","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN \u003d \"add-run\";","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY \u003d \"add-activity\";","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE \u003d \"add-cycle\";","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM \u003d \"add-swim\";","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_DELETE \u003d \"delete-activity\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_LIST \u003d \"list-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_EDIT \u003d \"edit-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_ACTIVITY_FIND \u003d \"find-activity\";","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN_EDIT \u003d \"edit-run\";","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE_EDIT \u003d \"edit-cycle\";","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM_EDIT \u003d \"edit-swim\";","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_GOAL_SET \u003d \"set-activity-goal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_SET \u003d \"set-diet-goal\";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_EDIT \u003d \"edit-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_LIST \u003d \"list-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_DELETE \u003d \"delete-diet-goal\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_ADD \u003d \"add-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_DELETE \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_EDIT \u003d \"edit-diet\";","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_LIST \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_DIET_FIND \u003d \"find-diet\";","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":18,"DaDevChia":6,"AlWo223":11,"yicheng-toh":4,"nihalzp":4}},{"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":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_SPORT_MISSING \u003d \"Please specify the sport using \\\"sport/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_TYPE_MISSING \u003d \"Please specify the goal type using \\\"type/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_PERIOD_MISSING \u003d \"Please specify the period using \\\"period/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_TARGET_MISSING \u003d \"Please specify the target value using \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" \"\\\"target/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" \"Please specify the protein intake using \\\"protein/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" \"Please specify the carbohydrate intake using \\\"carb/\\\"!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_MISSING \u003d \"Please specify the fat intake using \\\"fat/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DATETIME_MISSING \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" \"Please specify the datetime of the diet using \\\"datetime/\\\"!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"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":33,"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":34,"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":35,"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":36,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_EMPTY \u003d \"The calories burned cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_EMPTY \u003d \"The protein intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_EMPTY \u003d \"The carbohydrate intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_EMPTY \u003d \"The fat intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DATETIME_EMPTY \u003d \"The datetime of a diet cannot be empty!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_UPDATED \u003d \"Ok, I\u0027ve updated this diet:\";","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DURATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" \"The duration of an activity must be in the format \\\"hh:mm:ss\\\"!\";","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DISTANCE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" \"The distance of an activity must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DISTANCE_NEGATIVE \u003d","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" \"The distance of an activity cannot be negative!\";","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_TARGET_NEGATIVE \u003d \"The target value cannot be negative. \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" \"You wanna make progress, not regress ;)\";","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_TARGET_INVALID \u003d \"The target value of an activity goal must be a positive \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" \"integer!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATETIME_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" \"The datetime must be in the format \\\"yyyy-MM-dd HH:mm\\\"!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATE_INVALID \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" \"The date must be in the format \\\"yyyy-MM-dd\\\"!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" \"The calories burned must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_SPORT_INVALID \u003d \"The sport of an activity must be one of the following: \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" \"\\\"running\\\", \\\"cycling\\\", \\\"swimming\\\", \\\"general\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_TYPE_INVALID \u003d \"The type of an activity must be either \\\"distance\\\" or \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" \"\\\"duration\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_PERIOD_INVALID \u003d \"The period of an activity must be either \\\"weekly\\\" or \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" \"\\\"monthly\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"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":65,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" \"The carbohydrate intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"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":68,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_ACTIVITY_FIND \u003d \"I\u0027ve found these activities:\";","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_ADDED \u003d \"Well done! I\u0027ve added this activity:\";","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_GOAL_ADDED \u003d \"Alright, I\u0027ve added this activity goal:\";","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_DELETED \u003d \"Gotcha, I\u0027ve deleted this activity:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_ADDED \u003d \"Well done! I\u0027ve added this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" \"Please specify the elevation gain using \\\"elevation/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_ELEVATION_EMPTY \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" \"The elevation gain of an activity cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" \"The elevation gain of an activity must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"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":80,"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":81,"author":{"gitId":"AlWo223"},"content":" \"list for the correct index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" \"Please specify the swimming style using \\\"style/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" \"The swimming style of an activity must be one of \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" \"the following: \\\"butterfly\\\", \\\"backstroke\\\", \\\"breaststroke\\\", \\\"freestyle\\\"!\";","lastModifiedDate":"2023-10-13"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" \"You have tracked a total of %d activities. Keep pushing!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"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":90,"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":91,"author":{"gitId":"AlWo223"},"content":" \" provide the index and the updated entry!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_UPDATED \u003d \"Ok, I\u0027ve updated this activity:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of %d diets. Keep grinding!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first activity. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"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":99,"author":{"gitId":"yicheng-toh"},"content":" \"must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"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":101,"author":{"gitId":"yicheng-toh"},"content":" \"following: \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"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":103,"author":{"gitId":"yicheng-toh"},"content":" \"Please edit the goal instead!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"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":105,"author":{"gitId":"yicheng-toh"},"content":" \"Please add the goal before editing it!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"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":107,"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":108,"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":109,"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":110,"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":111,"author":{"gitId":"yicheng-toh"},"content":" \"Please add one to continue.\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"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":113,"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":114,"author":{"gitId":"yicheng-toh"},"content":" \"Please enter a value from 1 to %d.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INSUFFICIENT_INPUT \u003d \"Please input the following keywords \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"yicheng-toh"},"content":" \"to create or edit your diet goals:\\n \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\" \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":117,"author":{"gitId":"yicheng-toh"},"content":" \"followed by the target value.\\n\" + \"\\te.g. calories/100\";","lastModifiedDate":"2023-10-24"},{"lineNumber":118,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSSAGE_DIETGOAL_REPEATED_NUTRIENT \u003d \"Please ensure that there are \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"yicheng-toh"},"content":" \"no repetitions for your diet goal nutrients.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first diet. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_INVALID_DIET_INDEX \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" \"The diet index is invalid! Please enter a valid diet index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_INDEX_TYPE_INVALID \u003d \"The diet index must be a positive integer!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DELETED \u003d \"Noted. I\u0027ve removed this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_LIST \u003d \"Here are the diets in your list:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_DIET_FIND \u003d \"I\u0027ve found these diets:\";","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_NO_CHANGE_REQUESTED \u003d \"No change requested. Specify the appropriate \" +","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" \"parameters to edit the diet.\";","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"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":132,"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":133,"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":134,"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":135,"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":136,"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":137,"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":138,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_SLEEP_FIND \u003d \"I\u0027ve found these sleeps:\";","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"DaDevChia"},"content":" \"Invalid date-time format. Please use dd-MM-yyyy HH:mm.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"DaDevChia"},"content":" \"Please specify both the start and end time of your sleep.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the start time of your sleep before the end time.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to delete.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to edit.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE \u003d ","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to edit is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_DELETE_INDEX_OOBE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to delete is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"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":155,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_IO_EXCEPTION \u003d \"An I/O exception occurred.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":157,"author":{"gitId":"skylee03"},"content":" /* Help Messages */","lastModifiedDate":"2023-10-21"},{"lineNumber":158,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY","lastModifiedDate":"2023-10-21"},{"lineNumber":159,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":160,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_RUN \u003d CommandName.COMMAND_RUN","lastModifiedDate":"2023-10-21"},{"lineNumber":161,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":162,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SWIM \u003d CommandName.COMMAND_SWIM","lastModifiedDate":"2023-10-21"},{"lineNumber":163,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":164,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_CYCLE \u003d CommandName.COMMAND_CYCLE","lastModifiedDate":"2023-10-21"},{"lineNumber":165,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":166,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":167,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":168,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_LIST","lastModifiedDate":"2023-10-21"},{"lineNumber":169,"author":{"gitId":"skylee03"},"content":" + \" [-d]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":170,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":171,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":172,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_RUN \u003d CommandName.COMMAND_RUN_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":173,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":174,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SWIM \u003d CommandName.COMMAND_SWIM_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":175,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":176,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_CYCLE \u003d CommandName.COMMAND_CYCLE_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":177,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":178,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":180,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_DIET \u003d CommandName.COMMAND_DIET_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":181,"author":{"gitId":"nihalzp"},"content":" + \" calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME\";","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"nihalzp"},"content":" public static final String HELP_EDIT_DIET \u003d CommandName.COMMAND_DIET_EDIT","lastModifiedDate":"2023-10-26"},{"lineNumber":183,"author":{"gitId":"nihalzp"},"content":" + \" INDEX calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME\";","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_DIET \u003d CommandName.COMMAND_DIET_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":185,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":186,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_DIET \u003d CommandName.COMMAND_DIET_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":187,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND_DIET \u003d CommandName.COMMAND_DIET_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":188,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":189,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SLEEP \u003d CommandName.COMMAND_SLEEP_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":190,"author":{"gitId":"skylee03"},"content":" + \" start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":191,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_SLEEP \u003d CommandName.COMMAND_SLEEP_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":192,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_SLEEP \u003d CommandName.COMMAND_SLEEP_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":193,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":194,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SLEEP \u003d CommandName.COMMAND_SLEEP_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":195,"author":{"gitId":"skylee03"},"content":" + \" INDEX start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":196,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND_SLEEP \u003d CommandName.COMMAND_SLEEP_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":197,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":198,"author":{"gitId":"skylee03"},"content":" public static final String HELP_SAVE \u003d CommandName.COMMAND_SAVE;","lastModifiedDate":"2023-10-22"},{"lineNumber":199,"author":{"gitId":"skylee03"},"content":" public static final String HELP_BYE \u003d CommandName.COMMAND_BYE;","lastModifiedDate":"2023-10-21"},{"lineNumber":200,"author":{"gitId":"skylee03"},"content":" public static final String HELP_HELP \u003d CommandName.COMMAND_HELP","lastModifiedDate":"2023-10-21"},{"lineNumber":201,"author":{"gitId":"skylee03"},"content":" + \" [COMMAND]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":202,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND \u003d CommandName.COMMAND_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":203,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":204,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DETAILS \u003d","lastModifiedDate":"2023-10-21"},{"lineNumber":205,"author":{"gitId":"skylee03"},"content":" \"Please check our user guide (https://ay2324s1-cs2113-t17-1.github.io/tp/) for details.\";","lastModifiedDate":"2023-10-21"},{"lineNumber":206,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":63,"DaDevChia":22,"AlWo223":35,"yicheng-toh":26,"nihalzp":60}},{"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"}],"authorContributionMap":{"yicheng-toh":20}},{"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":"nihalzp"},"content":" public static final String CALORIES_SEPARATOR \u003d \"calories/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" public static final String PROTEIN_SEPARATOR \u003d \"protein/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" public static final String CARB_SEPARATOR \u003d \"carb/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" public static final String FAT_SEPARATOR \u003d \"fat/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" public static final String START_TIME_SEPARATOR \u003d \"start/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" public static final String END_TIME_SEPARATOR \u003d \"end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public static final String SPORT_SEPARATOR \u003d \"sport/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public static final String TYPE_SEPARATOR \u003d \"type/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String PERIOD_SEPARATOR \u003d \"period/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String TARGET_SEPARATOR \u003d \"target/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DaDevChia":3,"AlWo223":15,"nihalzp":5}},{"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.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.HelpCommand;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.SaveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.AddDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.DeleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.DeleteDietGoalCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.EditDietCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.EditDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.diet.FindDietCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.ListDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.SetDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.sleep.FindSleepCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Cycle;","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Swim;","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.AddActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.DeleteActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.EditActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.FindActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.ListActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.SetActivityGoalCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for command parser.","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":"public class Parser {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" private static final DateTimeFormatter sleepTimeFormatter \u003d","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"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":61,"author":{"gitId":"nihalzp"},"content":" * while the second part is the command arguments. The second part can be empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" * @return A string array whose first element is the command type and the second element is the command","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" * arguments.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" public static String[] splitCommandWordAndArgs(String rawUserInput) {","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" final String[] split \u003d rawUserInput.trim().split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" return split.length \u003d\u003d 2 ? split : new String[]{split[0], \"\"};","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" * Parses the raw user input and returns the corresponding command object.","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" * @return An object representing the command.","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" public static Command parseCommand(String rawUserInput) throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" final String[] commandTypeAndParams \u003d splitCommandWordAndArgs(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" final String commandType \u003d commandTypeAndParams[0];","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" final String commandArgs \u003d commandTypeAndParams[1];","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_BYE:","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" return new ByeCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_HELP:","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" return new HelpCommand(commandArgs);","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_SAVE:","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"skylee03"},"content":" return new FindCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_ADD:","lastModifiedDate":"2023-10-12"},{"lineNumber":96,"author":{"gitId":"DaDevChia"},"content":" return parseSleepAdd(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":97,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_LIST:","lastModifiedDate":"2023-10-12"},{"lineNumber":98,"author":{"gitId":"DaDevChia"},"content":" return new ListSleepCommand();","lastModifiedDate":"2023-10-12"},{"lineNumber":99,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_EDIT:","lastModifiedDate":"2023-10-12"},{"lineNumber":100,"author":{"gitId":"DaDevChia"},"content":" return parseSleepEdit(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":101,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_DELETE:","lastModifiedDate":"2023-10-12"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":" return parseSleepDelete(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_SLEEP_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"skylee03"},"content":" return new FindSleepCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY:","lastModifiedDate":"2023-10-13"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseActivity(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE:","lastModifiedDate":"2023-10-13"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, false));","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN:","lastModifiedDate":"2023-10-13"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, true));","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM:","lastModifiedDate":"2023-10-13"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseSwim(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":" return new DeleteActivityCommand(parseActivityIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_LIST:","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":" return new ListActivityCommand(parseActivityListDetail(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" return new EditActivityCommand(parseActivityEdit(commandArgs),","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseRunEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseCycleEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseSwimEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_ACTIVITY_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" return new FindActivityCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_GOAL_SET:","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":" return new SetActivityGoalCommand(parseActivityGoal(commandArgs));","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_SET:","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"yicheng-toh"},"content":" return new SetDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_EDIT:","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"yicheng-toh"},"content":" return new EditDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"yicheng-toh"},"content":" return new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_DELETE:","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"yicheng-toh"},"content":" return new DeleteDietGoalCommand(parseDietGoalDelete(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_ADD:","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" return new AddDietCommand(parseDiet(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_EDIT:","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" return new EditDietCommand(parseDietIndex(commandArgs), parseDietEdit(commandArgs));","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":" return new DeleteDietCommand(parseDietIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_LIST:","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":" return new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_DIET_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":149,"author":{"gitId":"skylee03"},"content":" return new FindDietCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":150,"author":{"gitId":"skylee03"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":151,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":153,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":154,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":155,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity.","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"AlWo223"},"content":" public static int parseActivityIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"AlWo223"},"content":" final String commandArgsTrimmed \u003d commandArgs.trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"AlWo223"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"AlWo223"},"content":" index \u003d Integer.parseInt(commandArgsTrimmed);","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"AlWo223"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated activity for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated activity.","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed Activity object.","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"AlWo223"},"content":" public static Activity parseActivityEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":181,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":182,"author":{"gitId":"AlWo223"},"content":" return parseActivity(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":183,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":186,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":187,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":188,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated run for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated run.","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed run object.","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"AlWo223"},"content":" public static Activity parseRunEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":196,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":197,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], true);","lastModifiedDate":"2023-10-17"},{"lineNumber":198,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":200,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":201,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":202,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated cycle for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":206,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated cycle.","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed cycle object.","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"AlWo223"},"content":" public static Activity parseCycleEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":211,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":212,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], false);","lastModifiedDate":"2023-10-17"},{"lineNumber":213,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":214,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":215,"author":{"gitId":"AlWo223"},"content":" }","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-18"},{"lineNumber":219,"author":{"gitId":"AlWo223"},"content":" * Parses the provided update swim for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":221,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated swim.","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed swim object.","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"AlWo223"},"content":" public static Activity parseSwimEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":226,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"AlWo223"},"content":" return parseSwim(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":228,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":229,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":230,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":231,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":232,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":233,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity update for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":236,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the index.","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"AlWo223"},"content":" public static int parseActivityEditIndex(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":241,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":242,"author":{"gitId":"AlWo223"},"content":" return parseActivityIndex(arguments.split(\" \", 2)[0]);","lastModifiedDate":"2023-10-17"},{"lineNumber":243,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":244,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":245,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":246,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":247,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":248,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":249,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for viewing the activity list and returns whether the user wants the detailed","lastModifiedDate":"2023-10-25"},{"lineNumber":250,"author":{"gitId":"nihalzp"},"content":" * view","lastModifiedDate":"2023-10-25"},{"lineNumber":251,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":252,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-17"},{"lineNumber":253,"author":{"gitId":"AlWo223"},"content":" * @return boolean Whether the user wants the detailed view.","lastModifiedDate":"2023-10-17"},{"lineNumber":254,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":255,"author":{"gitId":"AlWo223"},"content":" public static boolean parseActivityListDetail(String commandArgs) {","lastModifiedDate":"2023-10-23"},{"lineNumber":256,"author":{"gitId":"AlWo223"},"content":" return commandArgs.toLowerCase().contains(Parameter.DETAIL_FLAG);","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":258,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":259,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":260,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for an activity and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":261,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":262,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":263,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":264,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-23"},{"lineNumber":265,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":266,"author":{"gitId":"AlWo223"},"content":" public static Activity parseActivity(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":267,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":268,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":269,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":270,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":271,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":272,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":273,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":274,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":275,"author":{"gitId":"nihalzp"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":276,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":277,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":278,"author":{"gitId":"nihalzp"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":279,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":280,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":281,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":282,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":283,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":284,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":285,"author":{"gitId":"AlWo223"},"content":" final LocalTime durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":286,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":287,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":288,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":289,"author":{"gitId":"AlWo223"},"content":" return new Activity(caption, durationParsed, distanceParsed, datetimeParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":290,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":291,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":292,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":293,"author":{"gitId":"AlWo223"},"content":" * Parses the raw activity duration input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":294,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":295,"author":{"gitId":"AlWo223"},"content":" * @param duration The raw user input containing the duration.","lastModifiedDate":"2023-10-22"},{"lineNumber":296,"author":{"gitId":"AlWo223"},"content":" * @return durationParsed The parsed LocalTime duration.","lastModifiedDate":"2023-10-25"},{"lineNumber":297,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-22"},{"lineNumber":298,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":299,"author":{"gitId":"AlWo223"},"content":" public static LocalTime parseDuration(String duration) throws AthletiException {","lastModifiedDate":"2023-10-24"},{"lineNumber":300,"author":{"gitId":"AlWo223"},"content":" LocalTime durationParsed;","lastModifiedDate":"2023-10-24"},{"lineNumber":301,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":302,"author":{"gitId":"AlWo223"},"content":" durationParsed \u003d LocalTime.parse(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":303,"author":{"gitId":"AlWo223"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":304,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":305,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":306,"author":{"gitId":"AlWo223"},"content":" return durationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":307,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":308,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":309,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":310,"author":{"gitId":"AlWo223"},"content":" * Parses the raw date time input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":311,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":312,"author":{"gitId":"AlWo223"},"content":" * @param datetime The raw user input containing the date time.","lastModifiedDate":"2023-10-22"},{"lineNumber":313,"author":{"gitId":"AlWo223"},"content":" * @return datetimeParsed The parsed LocalDateTime object.","lastModifiedDate":"2023-10-22"},{"lineNumber":314,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-22"},{"lineNumber":315,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":316,"author":{"gitId":"AlWo223"},"content":" public static LocalDateTime parseDateTime(String datetime) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":317,"author":{"gitId":"AlWo223"},"content":" LocalDateTime datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":318,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":319,"author":{"gitId":"AlWo223"},"content":" datetimeParsed \u003d LocalDateTime.parse(datetime.replace(\" \", \"T\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":320,"author":{"gitId":"AlWo223"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":321,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":322,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":323,"author":{"gitId":"AlWo223"},"content":" return datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":324,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":325,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":326,"author":{"gitId":"skylee03"},"content":" public static LocalDate parseDate(String date) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":327,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":328,"author":{"gitId":"skylee03"},"content":" return LocalDate.parse(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":329,"author":{"gitId":"skylee03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":330,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DATE_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":331,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":332,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":333,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":334,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":335,"author":{"gitId":"AlWo223"},"content":" * Parses the raw activity distance input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":336,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":337,"author":{"gitId":"AlWo223"},"content":" * @param distance The raw user input containing the distance.","lastModifiedDate":"2023-10-22"},{"lineNumber":338,"author":{"gitId":"AlWo223"},"content":" * @return distanceParsed The parsed Integer distance.","lastModifiedDate":"2023-10-22"},{"lineNumber":339,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-22"},{"lineNumber":340,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":341,"author":{"gitId":"AlWo223"},"content":" public static int parseDistance(String distance) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":342,"author":{"gitId":"AlWo223"},"content":" int distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":343,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":344,"author":{"gitId":"AlWo223"},"content":" distanceParsed \u003d Integer.parseInt(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":345,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":346,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":347,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":348,"author":{"gitId":"AlWo223"},"content":" if (distanceParsed \u003c 0) {","lastModifiedDate":"2023-10-23"},{"lineNumber":349,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_NEGATIVE);","lastModifiedDate":"2023-10-23"},{"lineNumber":350,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":351,"author":{"gitId":"AlWo223"},"content":" return distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":352,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":353,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":354,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":355,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating an activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":356,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":357,"author":{"gitId":"AlWo223"},"content":" * @param durationIndex The position of the duration separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":358,"author":{"gitId":"AlWo223"},"content":" * @param distanceIndex The position of the distance separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":359,"author":{"gitId":"AlWo223"},"content":" * @param datetimeIndex The position of the datetime separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":360,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-22"},{"lineNumber":361,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":362,"author":{"gitId":"nihalzp"},"content":" public static void checkMissingActivityArguments(int durationIndex, int distanceIndex,","lastModifiedDate":"2023-10-15"},{"lineNumber":363,"author":{"gitId":"nihalzp"},"content":" int datetimeIndex) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":364,"author":{"gitId":"AlWo223"},"content":" if (durationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":365,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":366,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":367,"author":{"gitId":"AlWo223"},"content":" if (distanceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":368,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":369,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":370,"author":{"gitId":"AlWo223"},"content":" if (datetimeIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":371,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":372,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":373,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":374,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":375,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":376,"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":377,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":378,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":379,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":380,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":381,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":382,"author":{"gitId":"AlWo223"},"content":" public static Activity parseRunCycle(String arguments, boolean isRun) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":383,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":384,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":385,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":386,"author":{"gitId":"AlWo223"},"content":" final int elevationIndex \u003d arguments.indexOf(Parameter.ELEVATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":387,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":388,"author":{"gitId":"AlWo223"},"content":" checkMissingRunCycleArguments(durationIndex, distanceIndex, datetimeIndex, elevationIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":389,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":390,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":391,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":392,"author":{"gitId":"nihalzp"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":393,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":394,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":395,"author":{"gitId":"nihalzp"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":396,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":397,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":398,"author":{"gitId":"nihalzp"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), elevationIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":399,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":400,"author":{"gitId":"AlWo223"},"content":" final String elevation \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":401,"author":{"gitId":"AlWo223"},"content":" arguments.substring(elevationIndex + Parameter.ELEVATION_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":402,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":403,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":404,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":405,"author":{"gitId":"AlWo223"},"content":" final LocalTime durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":406,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":407,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":408,"author":{"gitId":"AlWo223"},"content":" final int elevationParsed \u003d parseElevation(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":409,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":410,"author":{"gitId":"AlWo223"},"content":" if (isRun) {","lastModifiedDate":"2023-10-17"},{"lineNumber":411,"author":{"gitId":"AlWo223"},"content":" return new Run(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":412,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":413,"author":{"gitId":"AlWo223"},"content":" return new Cycle(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-17"},{"lineNumber":414,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":415,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":416,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":417,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":418,"author":{"gitId":"AlWo223"},"content":" * Parses the raw elevation input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":419,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":420,"author":{"gitId":"AlWo223"},"content":" * @param elevation The raw user input containing the elevation.","lastModifiedDate":"2023-10-22"},{"lineNumber":421,"author":{"gitId":"AlWo223"},"content":" * @return elevationParsed The parsed Integer elevation.","lastModifiedDate":"2023-10-22"},{"lineNumber":422,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-22"},{"lineNumber":423,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":424,"author":{"gitId":"AlWo223"},"content":" public static int parseElevation(String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":425,"author":{"gitId":"AlWo223"},"content":" int elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":426,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":427,"author":{"gitId":"AlWo223"},"content":" elevationParsed \u003d Integer.parseInt(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":428,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":429,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":430,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":431,"author":{"gitId":"AlWo223"},"content":" return elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":432,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":433,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":434,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":435,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating a run or cycle.","lastModifiedDate":"2023-10-22"},{"lineNumber":436,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":437,"author":{"gitId":"AlWo223"},"content":" * @param durationIndex The position of the duration separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":438,"author":{"gitId":"AlWo223"},"content":" * @param distanceIndex The position of the distance separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":439,"author":{"gitId":"AlWo223"},"content":" * @param datetimeIndex The position of the datetime separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":440,"author":{"gitId":"AlWo223"},"content":" * @param elevationIndex The position of the elevation separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":441,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-22"},{"lineNumber":442,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":443,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingRunCycleArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":444,"author":{"gitId":"AlWo223"},"content":" int elevationIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":445,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":446,"author":{"gitId":"AlWo223"},"content":" if (elevationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":447,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":448,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":449,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":450,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":451,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":452,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating a swim.","lastModifiedDate":"2023-10-22"},{"lineNumber":453,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":454,"author":{"gitId":"AlWo223"},"content":" * @param durationIndex The position of the duration separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":455,"author":{"gitId":"AlWo223"},"content":" * @param distanceIndex The position of the distance separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":456,"author":{"gitId":"AlWo223"},"content":" * @param datetimeIndex The position of the datetime separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":457,"author":{"gitId":"AlWo223"},"content":" * @param swimmingStyleIndex The position of the swimming style separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":458,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-22"},{"lineNumber":459,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":460,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingSwimArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":461,"author":{"gitId":"AlWo223"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":462,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":463,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":464,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":465,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":466,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":467,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":468,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":469,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input includes any empty arguments for creating an activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":470,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":471,"author":{"gitId":"AlWo223"},"content":" * @param caption The caption of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":472,"author":{"gitId":"AlWo223"},"content":" * @param duration The duration of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":473,"author":{"gitId":"AlWo223"},"content":" * @param distance The distance of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":474,"author":{"gitId":"AlWo223"},"content":" * @param datetime The datetime of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":475,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are empty.","lastModifiedDate":"2023-10-22"},{"lineNumber":476,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":477,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":478,"author":{"gitId":"nihalzp"},"content":" String datetime) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":479,"author":{"gitId":"AlWo223"},"content":" if (caption.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":480,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_CAPTION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":481,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":482,"author":{"gitId":"AlWo223"},"content":" if (duration.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":483,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":484,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":485,"author":{"gitId":"AlWo223"},"content":" if (distance.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":486,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":487,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":488,"author":{"gitId":"AlWo223"},"content":" if (datetime.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":489,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":490,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":491,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":492,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":493,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":494,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input includes any empty arguments for creating a cycle or run.","lastModifiedDate":"2023-10-22"},{"lineNumber":495,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":496,"author":{"gitId":"AlWo223"},"content":" * @param caption The caption of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":497,"author":{"gitId":"AlWo223"},"content":" * @param duration The duration of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":498,"author":{"gitId":"AlWo223"},"content":" * @param distance The distance of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":499,"author":{"gitId":"AlWo223"},"content":" * @param datetime The datetime of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":500,"author":{"gitId":"AlWo223"},"content":" * @param elevation The elevation of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":501,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are empty.","lastModifiedDate":"2023-10-22"},{"lineNumber":502,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":503,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":504,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-15"},{"lineNumber":505,"author":{"gitId":"AlWo223"},"content":" String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":506,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":507,"author":{"gitId":"AlWo223"},"content":" if (elevation.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":508,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":509,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":510,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":511,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":512,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":513,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input includes any empty arguments for creating a swim.","lastModifiedDate":"2023-10-22"},{"lineNumber":514,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":515,"author":{"gitId":"AlWo223"},"content":" * @param caption The caption of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":516,"author":{"gitId":"AlWo223"},"content":" * @param duration The duration of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":517,"author":{"gitId":"AlWo223"},"content":" * @param distance The distance of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":518,"author":{"gitId":"AlWo223"},"content":" * @param datetime The datetime of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":519,"author":{"gitId":"AlWo223"},"content":" * @param swimmingStyleIndex The position of the swimming style separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":520,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are empty.","lastModifiedDate":"2023-10-22"},{"lineNumber":521,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":522,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":523,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-25"},{"lineNumber":524,"author":{"gitId":"nihalzp"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":525,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":526,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":527,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":528,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":529,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":530,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":531,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":532,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a swim and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":533,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":534,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":535,"author":{"gitId":"AlWo223"},"content":" * @return activity An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":536,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-23"},{"lineNumber":537,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":538,"author":{"gitId":"AlWo223"},"content":" public static Activity parseSwim(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":539,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":540,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":541,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-23"},{"lineNumber":542,"author":{"gitId":"AlWo223"},"content":" final int swimmingStyleIndex \u003d arguments.indexOf(Parameter.SWIMMING_STYLE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":543,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":544,"author":{"gitId":"AlWo223"},"content":" checkMissingSwimArguments(durationIndex, distanceIndex, datetimeIndex, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":545,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":546,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":547,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":548,"author":{"gitId":"nihalzp"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":549,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":550,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":551,"author":{"gitId":"nihalzp"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":552,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":553,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":554,"author":{"gitId":"nihalzp"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), swimmingStyleIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":555,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":556,"author":{"gitId":"AlWo223"},"content":" final String swimmingStyle \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":557,"author":{"gitId":"AlWo223"},"content":" arguments.substring(swimmingStyleIndex + Parameter.SWIMMING_STYLE_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":558,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":559,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":560,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":561,"author":{"gitId":"AlWo223"},"content":" final LocalTime durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":562,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":563,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":564,"author":{"gitId":"AlWo223"},"content":" final Swim.SwimmingStyle swimmingStyleParsed \u003d parseSwimmingStyle(swimmingStyle);","lastModifiedDate":"2023-10-13"},{"lineNumber":565,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":566,"author":{"gitId":"AlWo223"},"content":" return new Swim(caption, durationParsed, distanceParsed, datetimeParsed, swimmingStyleParsed);","lastModifiedDate":"2023-10-18"},{"lineNumber":567,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":568,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":569,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":570,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a swimming style and returns the corresponding swimming style object.","lastModifiedDate":"2023-10-22"},{"lineNumber":571,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":572,"author":{"gitId":"AlWo223"},"content":" * @param swimmingStyle The raw user input containing the swimming style.","lastModifiedDate":"2023-10-22"},{"lineNumber":573,"author":{"gitId":"AlWo223"},"content":" * @return swimmingStyle An object representing the swimming style.","lastModifiedDate":"2023-10-22"},{"lineNumber":574,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-22"},{"lineNumber":575,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":576,"author":{"gitId":"AlWo223"},"content":" public static Swim.SwimmingStyle parseSwimmingStyle(String swimmingStyle) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":577,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":578,"author":{"gitId":"AlWo223"},"content":" return Swim.SwimmingStyle.valueOf(swimmingStyle.toUpperCase());","lastModifiedDate":"2023-10-23"},{"lineNumber":579,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":580,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":581,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":582,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":583,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":584,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":585,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for adding an activity goal and returns the corresponding activity goal object.","lastModifiedDate":"2023-10-27"},{"lineNumber":586,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-27"},{"lineNumber":587,"author":{"gitId":"AlWo223"},"content":" * @return activityGoal An object representing the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":588,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":589,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":590,"author":{"gitId":"AlWo223"},"content":" public static ActivityGoal parseActivityGoal(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":591,"author":{"gitId":"AlWo223"},"content":" final int sportIndex \u003d commandArgs.indexOf(Parameter.SPORT_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":592,"author":{"gitId":"AlWo223"},"content":" final int typeIndex \u003d commandArgs.indexOf(Parameter.TYPE_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":593,"author":{"gitId":"AlWo223"},"content":" final int periodIndex \u003d commandArgs.indexOf(Parameter.PERIOD_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":594,"author":{"gitId":"AlWo223"},"content":" final int targetIndex \u003d commandArgs.indexOf(Parameter.TARGET_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":595,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":596,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityGoalArguments(sportIndex, typeIndex, periodIndex, targetIndex);","lastModifiedDate":"2023-10-27"},{"lineNumber":597,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":598,"author":{"gitId":"AlWo223"},"content":" final String sport \u003d commandArgs.substring(sportIndex + Parameter.SPORT_SEPARATOR.length(), typeIndex).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":599,"author":{"gitId":"AlWo223"},"content":" final String type \u003d","lastModifiedDate":"2023-10-27"},{"lineNumber":600,"author":{"gitId":"AlWo223"},"content":" commandArgs.substring(typeIndex + Parameter.TYPE_SEPARATOR.length(), periodIndex).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":601,"author":{"gitId":"AlWo223"},"content":" final String period \u003d","lastModifiedDate":"2023-10-27"},{"lineNumber":602,"author":{"gitId":"AlWo223"},"content":" commandArgs.substring(periodIndex + Parameter.PERIOD_SEPARATOR.length(), targetIndex).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":603,"author":{"gitId":"AlWo223"},"content":" final String target \u003d commandArgs.substring(targetIndex + Parameter.TARGET_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":604,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":605,"author":{"gitId":"AlWo223"},"content":" final ActivityGoal.Sport sportParsed \u003d parseSport(sport);","lastModifiedDate":"2023-10-27"},{"lineNumber":606,"author":{"gitId":"AlWo223"},"content":" final ActivityGoal.GoalType typeParsed \u003d parseGoalType(type);","lastModifiedDate":"2023-10-27"},{"lineNumber":607,"author":{"gitId":"AlWo223"},"content":" final Goal.Timespan periodParsed \u003d parsePeriod(period);","lastModifiedDate":"2023-10-27"},{"lineNumber":608,"author":{"gitId":"AlWo223"},"content":" final int targetParsed \u003d parseTarget(target);","lastModifiedDate":"2023-10-27"},{"lineNumber":609,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":610,"author":{"gitId":"AlWo223"},"content":" return new ActivityGoal(periodParsed, typeParsed, sportParsed, targetParsed);","lastModifiedDate":"2023-10-27"},{"lineNumber":611,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":612,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":613,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":614,"author":{"gitId":"AlWo223"},"content":" * Parses the sport input provided by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":615,"author":{"gitId":"AlWo223"},"content":" * @param sport The raw user input containing the sport.","lastModifiedDate":"2023-10-27"},{"lineNumber":616,"author":{"gitId":"AlWo223"},"content":" * @return sportParsed The parsed Sport object.","lastModifiedDate":"2023-10-27"},{"lineNumber":617,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":618,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":619,"author":{"gitId":"AlWo223"},"content":" public static ActivityGoal.Sport parseSport(String sport) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":620,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":621,"author":{"gitId":"AlWo223"},"content":" return ActivityGoal.Sport.valueOf(sport.toUpperCase());","lastModifiedDate":"2023-10-27"},{"lineNumber":622,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":623,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SPORT_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":624,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":625,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":626,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":627,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":628,"author":{"gitId":"AlWo223"},"content":" * Parses the goal type input provided by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":629,"author":{"gitId":"AlWo223"},"content":" * @param type The raw user input containing the goal type.","lastModifiedDate":"2023-10-27"},{"lineNumber":630,"author":{"gitId":"AlWo223"},"content":" * @return goalParsed The parsed GoalType object.","lastModifiedDate":"2023-10-27"},{"lineNumber":631,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":632,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":633,"author":{"gitId":"AlWo223"},"content":" public static ActivityGoal.GoalType parseGoalType(String type) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":634,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":635,"author":{"gitId":"AlWo223"},"content":" return ActivityGoal.GoalType.valueOf(type.toUpperCase());","lastModifiedDate":"2023-10-27"},{"lineNumber":636,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":637,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_TYPE_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":638,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":639,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":640,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":641,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":642,"author":{"gitId":"AlWo223"},"content":" * Parses the period input provided by the user","lastModifiedDate":"2023-10-27"},{"lineNumber":643,"author":{"gitId":"AlWo223"},"content":" * @param period The raw user input containing the period.","lastModifiedDate":"2023-10-27"},{"lineNumber":644,"author":{"gitId":"AlWo223"},"content":" * @return periodParsed The parsed Period object.","lastModifiedDate":"2023-10-27"},{"lineNumber":645,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":646,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":647,"author":{"gitId":"AlWo223"},"content":" public static Goal.Timespan parsePeriod(String period) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":648,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":649,"author":{"gitId":"AlWo223"},"content":" return Goal.Timespan.valueOf(period.toUpperCase());","lastModifiedDate":"2023-10-27"},{"lineNumber":650,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":651,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_PERIOD_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":652,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":653,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":654,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":655,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":656,"author":{"gitId":"AlWo223"},"content":" * Parses the target input provided by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":657,"author":{"gitId":"AlWo223"},"content":" * @param target The raw user input containing the target value.","lastModifiedDate":"2023-10-27"},{"lineNumber":658,"author":{"gitId":"AlWo223"},"content":" * @return targetParsed The parsed Integer target value.","lastModifiedDate":"2023-10-27"},{"lineNumber":659,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not a positive number.","lastModifiedDate":"2023-10-27"},{"lineNumber":660,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":661,"author":{"gitId":"AlWo223"},"content":" public static int parseTarget(String target) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":662,"author":{"gitId":"AlWo223"},"content":" int targetParsed;","lastModifiedDate":"2023-10-27"},{"lineNumber":663,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":664,"author":{"gitId":"AlWo223"},"content":" targetParsed \u003d Integer.parseInt(target);","lastModifiedDate":"2023-10-27"},{"lineNumber":665,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":666,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_TARGET_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":667,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":668,"author":{"gitId":"AlWo223"},"content":" if (targetParsed \u003c 0) {","lastModifiedDate":"2023-10-27"},{"lineNumber":669,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_TARGET_NEGATIVE);","lastModifiedDate":"2023-10-27"},{"lineNumber":670,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":671,"author":{"gitId":"AlWo223"},"content":" return targetParsed;","lastModifiedDate":"2023-10-27"},{"lineNumber":672,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":673,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":674,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":675,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating an activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":676,"author":{"gitId":"AlWo223"},"content":" * @param sportIndex The position of the sport separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":677,"author":{"gitId":"AlWo223"},"content":" * @param targetIndex The position of the target separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":678,"author":{"gitId":"AlWo223"},"content":" * @param periodIndex The position of the period separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":679,"author":{"gitId":"AlWo223"},"content":" * @param valueIndex The position of the value separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":680,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-27"},{"lineNumber":681,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":682,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingActivityGoalArguments(int sportIndex, int targetIndex, int periodIndex,","lastModifiedDate":"2023-10-27"},{"lineNumber":683,"author":{"gitId":"AlWo223"},"content":" int valueIndex) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":684,"author":{"gitId":"AlWo223"},"content":" if (sportIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":685,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_SPORT_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":686,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":687,"author":{"gitId":"AlWo223"},"content":" if (targetIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":688,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_TARGET_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":689,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":690,"author":{"gitId":"AlWo223"},"content":" if (periodIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":691,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_PERIOD_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":692,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":693,"author":{"gitId":"AlWo223"},"content":" if (valueIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":694,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_TARGET_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":695,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":696,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":697,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":698,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":699,"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":700,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":701,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":702,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the slee0 add command.","lastModifiedDate":"2023-10-16"},{"lineNumber":703,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":704,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":705,"author":{"gitId":"DaDevChia"},"content":" public static AddSleepCommand parseSleepAdd(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":706,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":707,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(Parameter.START_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":708,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(Parameter.END_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":709,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":710,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":711,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":712,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":713,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":714,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":715,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(startMarkerPos + Parameter.START_TIME_SEPARATOR.length(), endMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":716,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":717,"author":{"gitId":"nihalzp"},"content":" String endTimeStr \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":718,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(endMarkerPos + Parameter.END_TIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":719,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":720,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":721,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":722,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":723,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":724,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":725,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":726,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":727,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":728,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":729,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":730,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":731,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":732,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":733,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":734,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":735,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":736,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":737,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":738,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":739,"author":{"gitId":"DaDevChia"},"content":" return new AddSleepCommand(startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":740,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":741,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":742,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":743,"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":744,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":745,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":746,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep delete command.","lastModifiedDate":"2023-10-16"},{"lineNumber":747,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":748,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":749,"author":{"gitId":"DaDevChia"},"content":" public static DeleteSleepCommand parseSleepDelete(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":750,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":751,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":752,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":753,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":754,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":755,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":756,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":757,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":758,"author":{"gitId":"DaDevChia"},"content":" return new DeleteSleepCommand(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":759,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":760,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":761,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":762,"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":763,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":764,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":765,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep edit command.","lastModifiedDate":"2023-10-16"},{"lineNumber":766,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":767,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":768,"author":{"gitId":"DaDevChia"},"content":" public static EditSleepCommand parseSleepEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":769,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(Parameter.START_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":770,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(Parameter.END_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":771,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":772,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":773,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":774,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":775,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":776,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":777,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":778,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.substring(0, startMarkerPos).trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":779,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":780,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":781,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":782,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":783,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":784,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(startMarkerPos + Parameter.START_TIME_SEPARATOR.length(), endMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":785,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":786,"author":{"gitId":"nihalzp"},"content":" String endTimeStr \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":787,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(endMarkerPos + Parameter.END_TIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":788,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":789,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":790,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":791,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":792,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":793,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":794,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":795,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":796,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":797,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":798,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":799,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":800,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":801,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":802,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":803,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":804,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":805,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":806,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":807,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":808,"author":{"gitId":"DaDevChia"},"content":" return new EditSleepCommand(index, startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":809,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":810,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":811,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":812,"author":{"gitId":"yicheng-toh"},"content":" * @param commandArgs User provided data to create goals for the nutrients defined.","lastModifiedDate":"2023-10-15"},{"lineNumber":813,"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":814,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Invalid input by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":815,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":816,"author":{"gitId":"yicheng-toh"},"content":" public static ArrayList\u003cDietGoal\u003e parseDietGoalSetEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-16"},{"lineNumber":817,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.trim().isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":818,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INSUFFICIENT_INPUT);","lastModifiedDate":"2023-10-22"},{"lineNumber":819,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":820,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":821,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValues;","lastModifiedDate":"2023-10-15"},{"lineNumber":822,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.contains(\" \")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":823,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d commandArgs.split(\"\\\\s+\");","lastModifiedDate":"2023-10-15"},{"lineNumber":824,"author":{"gitId":"yicheng-toh"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":825,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d new String[]{commandArgs};","lastModifiedDate":"2023-10-15"},{"lineNumber":826,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":827,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":828,"author":{"gitId":"yicheng-toh"},"content":" String nutrient;","lastModifiedDate":"2023-10-15"},{"lineNumber":829,"author":{"gitId":"yicheng-toh"},"content":" int targetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":830,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":831,"author":{"gitId":"yicheng-toh"},"content":" ArrayList\u003cDietGoal\u003e dietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":832,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e recordedNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":833,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":834,"author":{"gitId":"yicheng-toh"},"content":" for (int i \u003d 0; i \u003c nutrientAndTargetValues.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":835,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValue \u003d nutrientAndTargetValues[i].split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":836,"author":{"gitId":"yicheng-toh"},"content":" nutrient \u003d nutrientAndTargetValue[0];","lastModifiedDate":"2023-10-15"},{"lineNumber":837,"author":{"gitId":"yicheng-toh"},"content":" targetValue \u003d Integer.parseInt(nutrientAndTargetValue[1]);","lastModifiedDate":"2023-10-15"},{"lineNumber":838,"author":{"gitId":"yicheng-toh"},"content":" if (targetValue \u003d\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":839,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":840,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":841,"author":{"gitId":"yicheng-toh"},"content":" if (!NutrientVerifier.verify(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":842,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INVALID_NUTRIENT);","lastModifiedDate":"2023-10-15"},{"lineNumber":843,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":844,"author":{"gitId":"yicheng-toh"},"content":" if (recordedNutrients.contains(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":845,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSSAGE_DIETGOAL_REPEATED_NUTRIENT);","lastModifiedDate":"2023-10-22"},{"lineNumber":846,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":847,"author":{"gitId":"yicheng-toh"},"content":" DietGoal dietGoal \u003d new DietGoal(nutrient, targetValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":848,"author":{"gitId":"yicheng-toh"},"content":" dietGoals.add(dietGoal);","lastModifiedDate":"2023-10-15"},{"lineNumber":849,"author":{"gitId":"yicheng-toh"},"content":" recordedNutrients.add(nutrient);","lastModifiedDate":"2023-10-22"},{"lineNumber":850,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":851,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":852,"author":{"gitId":"yicheng-toh"},"content":" return dietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":853,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":854,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":855,"author":{"gitId":"yicheng-toh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":856,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INSUFFICIENT_INPUT);","lastModifiedDate":"2023-10-24"},{"lineNumber":857,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":858,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":859,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":860,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":861,"author":{"gitId":"yicheng-toh"},"content":" * @param deleteIndexString Index of the goal to be deleted in String format","lastModifiedDate":"2023-10-17"},{"lineNumber":862,"author":{"gitId":"yicheng-toh"},"content":" * @return Index of the goal in integer format in users\u0027 perspective.","lastModifiedDate":"2023-10-17"},{"lineNumber":863,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Catch invalid characters and numbers.","lastModifiedDate":"2023-10-17"},{"lineNumber":864,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":865,"author":{"gitId":"yicheng-toh"},"content":" public static int parseDietGoalDelete(String deleteIndexString) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":866,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":867,"author":{"gitId":"yicheng-toh"},"content":" int deleteIndex \u003d Integer.parseInt(deleteIndexString.trim());","lastModifiedDate":"2023-10-17"},{"lineNumber":868,"author":{"gitId":"yicheng-toh"},"content":" if (deleteIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":869,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":870,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":871,"author":{"gitId":"yicheng-toh"},"content":" return deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":872,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":873,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":874,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":875,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":876,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":877,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":878,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for a diet and returns the corresponding diet object.","lastModifiedDate":"2023-10-15"},{"lineNumber":879,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":880,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":881,"author":{"gitId":"nihalzp"},"content":" * @return An object representing the diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":882,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":883,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":884,"author":{"gitId":"nihalzp"},"content":" public static Diet parseDiet(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":885,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d commandArgs.indexOf(Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":886,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d commandArgs.indexOf(Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":887,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d commandArgs.indexOf(Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":888,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d commandArgs.indexOf(Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":889,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d commandArgs.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":890,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":891,"author":{"gitId":"nihalzp"},"content":" checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos, fatMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":892,"author":{"gitId":"nihalzp"},"content":" datetimeMarkerPos);","lastModifiedDate":"2023-10-25"},{"lineNumber":893,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":894,"author":{"gitId":"nihalzp"},"content":" String calories \u003d commandArgs.substring(caloriesMarkerPos + Parameter.CALORIES_SEPARATOR.length(),","lastModifiedDate":"2023-10-25"},{"lineNumber":895,"author":{"gitId":"nihalzp"},"content":" proteinMarkerPos).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":896,"author":{"gitId":"nihalzp"},"content":" String protein \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":897,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(proteinMarkerPos + Parameter.PROTEIN_SEPARATOR.length(), carbMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":898,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":899,"author":{"gitId":"nihalzp"},"content":" String carb \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":900,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(carbMarkerPos + Parameter.CARB_SEPARATOR.length(), fatMarkerPos).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":901,"author":{"gitId":"nihalzp"},"content":" String fat \u003d commandArgs.substring(fatMarkerPos + Parameter.FAT_SEPARATOR.length(), datetimeMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":902,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":903,"author":{"gitId":"nihalzp"},"content":" String datetime \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":904,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(datetimeMarkerPos + Parameter.DATETIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":905,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":906,"author":{"gitId":"nihalzp"},"content":" checkEmptyDietArguments(calories, protein, carb, fat, datetime);","lastModifiedDate":"2023-10-25"},{"lineNumber":907,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":908,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed \u003d parseCalories(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":909,"author":{"gitId":"nihalzp"},"content":" int proteinParsed \u003d parseProtein(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":910,"author":{"gitId":"nihalzp"},"content":" int carbParsed \u003d parseCarb(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":911,"author":{"gitId":"nihalzp"},"content":" int fatParsed \u003d parseFat(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":912,"author":{"gitId":"nihalzp"},"content":" LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-25"},{"lineNumber":913,"author":{"gitId":"nihalzp"},"content":" return new Diet(caloriesParsed, proteinParsed, carbParsed, fatParsed, datetimeParsed);","lastModifiedDate":"2023-10-25"},{"lineNumber":914,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":915,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":916,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":917,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet contains all the required arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":918,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":919,"author":{"gitId":"nihalzp"},"content":" * @param caloriesMarkerPos The position of the calories marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":920,"author":{"gitId":"nihalzp"},"content":" * @param proteinMarkerPos The position of the protein marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":921,"author":{"gitId":"nihalzp"},"content":" * @param carbMarkerPos The position of the carb marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":922,"author":{"gitId":"nihalzp"},"content":" * @param fatMarkerPos The position of the fat marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":923,"author":{"gitId":"nihalzp"},"content":" * @param datetimeMarkerPos The position of the datetime marker.","lastModifiedDate":"2023-10-25"},{"lineNumber":924,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":925,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":926,"author":{"gitId":"nihalzp"},"content":" public static void checkMissingDietArguments(int caloriesMarkerPos, int proteinMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":927,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos, int fatMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":928,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":929,"author":{"gitId":"nihalzp"},"content":" if (caloriesMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":930,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":931,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":932,"author":{"gitId":"nihalzp"},"content":" if (proteinMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":933,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":934,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":935,"author":{"gitId":"nihalzp"},"content":" if (carbMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":936,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":937,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":938,"author":{"gitId":"nihalzp"},"content":" if (fatMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":939,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":940,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":941,"author":{"gitId":"nihalzp"},"content":" if (datetimeMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-25"},{"lineNumber":942,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_DATETIME_MISSING);","lastModifiedDate":"2023-10-25"},{"lineNumber":943,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":944,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":945,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":946,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":947,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":948,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":949,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":950,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":951,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":952,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":953,"author":{"gitId":"nihalzp"},"content":" * @param datetime The datetime input.","lastModifiedDate":"2023-10-25"},{"lineNumber":954,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":955,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":956,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyDietArguments(String calories, String protein, String carb, String fat,","lastModifiedDate":"2023-10-25"},{"lineNumber":957,"author":{"gitId":"nihalzp"},"content":" String datetime) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":958,"author":{"gitId":"nihalzp"},"content":" if (calories.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":959,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":960,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":961,"author":{"gitId":"nihalzp"},"content":" if (protein.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":962,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":963,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":964,"author":{"gitId":"nihalzp"},"content":" if (carb.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":965,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":966,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":967,"author":{"gitId":"nihalzp"},"content":" if (fat.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":968,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":969,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":970,"author":{"gitId":"nihalzp"},"content":" if (datetime.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":971,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_DATETIME_EMPTY);","lastModifiedDate":"2023-10-25"},{"lineNumber":972,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":973,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":974,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":975,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":976,"author":{"gitId":"nihalzp"},"content":" * Parses the calories input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":977,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":978,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":979,"author":{"gitId":"nihalzp"},"content":" * @return The parsed calories.","lastModifiedDate":"2023-10-15"},{"lineNumber":980,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":981,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":982,"author":{"gitId":"nihalzp"},"content":" public static int parseCalories(String calories) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":983,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":984,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":985,"author":{"gitId":"nihalzp"},"content":" caloriesParsed \u003d Integer.parseInt(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":986,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":987,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":988,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":989,"author":{"gitId":"nihalzp"},"content":" if (caloriesParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":990,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":991,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":992,"author":{"gitId":"nihalzp"},"content":" return caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":993,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":994,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":995,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":996,"author":{"gitId":"nihalzp"},"content":" * Parses the protein input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":997,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":998,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":999,"author":{"gitId":"nihalzp"},"content":" * @return The parsed protein.","lastModifiedDate":"2023-10-15"},{"lineNumber":1000,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":1001,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1002,"author":{"gitId":"nihalzp"},"content":" public static int parseProtein(String protein) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1003,"author":{"gitId":"nihalzp"},"content":" int proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1004,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1005,"author":{"gitId":"nihalzp"},"content":" proteinParsed \u003d Integer.parseInt(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":1006,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1007,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1008,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1009,"author":{"gitId":"nihalzp"},"content":" if (proteinParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1010,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1011,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1012,"author":{"gitId":"nihalzp"},"content":" return proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1013,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1014,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":1015,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":1016,"author":{"gitId":"nihalzp"},"content":" * Parses the carb input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":1017,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":1018,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":1019,"author":{"gitId":"nihalzp"},"content":" * @return The parsed carb.","lastModifiedDate":"2023-10-15"},{"lineNumber":1020,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":1021,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1022,"author":{"gitId":"nihalzp"},"content":" public static int parseCarb(String carb) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1023,"author":{"gitId":"nihalzp"},"content":" int carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1024,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1025,"author":{"gitId":"nihalzp"},"content":" carbParsed \u003d Integer.parseInt(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":1026,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1027,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1028,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1029,"author":{"gitId":"nihalzp"},"content":" if (carbParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1030,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1031,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1032,"author":{"gitId":"nihalzp"},"content":" return carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1033,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1034,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":1035,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":1036,"author":{"gitId":"nihalzp"},"content":" * Parses the fat input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":1037,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":1038,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":1039,"author":{"gitId":"nihalzp"},"content":" * @return The parsed fat.","lastModifiedDate":"2023-10-15"},{"lineNumber":1040,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":1041,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1042,"author":{"gitId":"nihalzp"},"content":" public static int parseFat(String fat) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1043,"author":{"gitId":"nihalzp"},"content":" int fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1044,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1045,"author":{"gitId":"nihalzp"},"content":" fatParsed \u003d Integer.parseInt(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":1046,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1047,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1048,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1049,"author":{"gitId":"nihalzp"},"content":" if (fatParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1050,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1051,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1052,"author":{"gitId":"nihalzp"},"content":" return fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1053,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1054,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":1055,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":1056,"author":{"gitId":"nihalzp"},"content":" * Parses the index of a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":1057,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":1058,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":1059,"author":{"gitId":"nihalzp"},"content":" * @return The parsed index.","lastModifiedDate":"2023-10-15"},{"lineNumber":1060,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":1061,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1062,"author":{"gitId":"nihalzp"},"content":" public static int parseDietIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1063,"author":{"gitId":"nihalzp"},"content":" if (commandArgs \u003d\u003d null || commandArgs.trim().isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1064,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-26"},{"lineNumber":1065,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1066,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1067,"author":{"gitId":"nihalzp"},"content":" String[] words \u003d commandArgs.trim().split(\"\\\\s+\", 2); // Split into parts","lastModifiedDate":"2023-10-26"},{"lineNumber":1068,"author":{"gitId":"nihalzp"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":1069,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1070,"author":{"gitId":"nihalzp"},"content":" index \u003d Integer.parseInt(words[0]);","lastModifiedDate":"2023-10-26"},{"lineNumber":1071,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1072,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1073,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1074,"author":{"gitId":"nihalzp"},"content":" if (index \u003c 1) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1075,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1076,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1077,"author":{"gitId":"nihalzp"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":1078,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1079,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1080,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":1081,"author":{"gitId":"nihalzp"},"content":" * Parses the value for a specific marker in a given argument string.","lastModifiedDate":"2023-10-26"},{"lineNumber":1082,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":1083,"author":{"gitId":"nihalzp"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-26"},{"lineNumber":1084,"author":{"gitId":"nihalzp"},"content":" * @param marker The marker whose value is to be retrieved.","lastModifiedDate":"2023-10-26"},{"lineNumber":1085,"author":{"gitId":"nihalzp"},"content":" * @return The value associated with the given marker, or an empty string if the marker is not found.","lastModifiedDate":"2023-10-26"},{"lineNumber":1086,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":1087,"author":{"gitId":"nihalzp"},"content":" public static String getValueForMarker(String arguments, String marker) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1088,"author":{"gitId":"nihalzp"},"content":" String patternString \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1089,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1090,"author":{"gitId":"nihalzp"},"content":" if (marker.equals(Parameter.DATETIME_SEPARATOR)) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1091,"author":{"gitId":"nihalzp"},"content":" // Special handling for datetime to capture the date and time","lastModifiedDate":"2023-10-26"},{"lineNumber":1092,"author":{"gitId":"nihalzp"},"content":" patternString \u003d marker + \"(\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{2}:\\\\d{2})\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1093,"author":{"gitId":"nihalzp"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":1094,"author":{"gitId":"nihalzp"},"content":" // For other markers, capture a sequence of non-whitespace characters","lastModifiedDate":"2023-10-26"},{"lineNumber":1095,"author":{"gitId":"nihalzp"},"content":" patternString \u003d marker + \"(\\\\S+)\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1096,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1097,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1098,"author":{"gitId":"nihalzp"},"content":" Pattern pattern \u003d Pattern.compile(patternString);","lastModifiedDate":"2023-10-26"},{"lineNumber":1099,"author":{"gitId":"nihalzp"},"content":" Matcher matcher \u003d pattern.matcher(arguments);","lastModifiedDate":"2023-10-26"},{"lineNumber":1100,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1101,"author":{"gitId":"nihalzp"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1102,"author":{"gitId":"nihalzp"},"content":" return matcher.group(1);","lastModifiedDate":"2023-10-26"},{"lineNumber":1103,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1104,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1105,"author":{"gitId":"nihalzp"},"content":" // Return empty string if no match is found","lastModifiedDate":"2023-10-26"},{"lineNumber":1106,"author":{"gitId":"nihalzp"},"content":" return \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1107,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1108,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1109,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":1110,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for a sleep and returns the corresponding sleep object.","lastModifiedDate":"2023-10-26"},{"lineNumber":1111,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":1112,"author":{"gitId":"nihalzp"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-26"},{"lineNumber":1113,"author":{"gitId":"nihalzp"},"content":" * @return An object representing the sleep.","lastModifiedDate":"2023-10-26"},{"lineNumber":1114,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":1115,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":1116,"author":{"gitId":"nihalzp"},"content":" public static HashMap\u003cString, String\u003e parseDietEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":1117,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":1118,"author":{"gitId":"nihalzp"},"content":" String calories \u003d getValueForMarker(arguments, Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1119,"author":{"gitId":"nihalzp"},"content":" String protein \u003d getValueForMarker(arguments, Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1120,"author":{"gitId":"nihalzp"},"content":" String carb \u003d getValueForMarker(arguments, Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1121,"author":{"gitId":"nihalzp"},"content":" String fat \u003d getValueForMarker(arguments, Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1122,"author":{"gitId":"nihalzp"},"content":" String datetime \u003d getValueForMarker(arguments, Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1123,"author":{"gitId":"nihalzp"},"content":" if (!calories.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1124,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed \u003d Integer.parseInt(calories);","lastModifiedDate":"2023-10-26"},{"lineNumber":1125,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, Integer.toString(caloriesParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1126,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1127,"author":{"gitId":"nihalzp"},"content":" if (!protein.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1128,"author":{"gitId":"nihalzp"},"content":" int proteinParsed \u003d Integer.parseInt(protein);","lastModifiedDate":"2023-10-26"},{"lineNumber":1129,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, Integer.toString(proteinParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1130,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1131,"author":{"gitId":"nihalzp"},"content":" if (!carb.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1132,"author":{"gitId":"nihalzp"},"content":" int carbParsed \u003d Integer.parseInt(carb);","lastModifiedDate":"2023-10-26"},{"lineNumber":1133,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, Integer.toString(carbParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1134,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1135,"author":{"gitId":"nihalzp"},"content":" if (!fat.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1136,"author":{"gitId":"nihalzp"},"content":" int fatParsed \u003d Integer.parseInt(fat);","lastModifiedDate":"2023-10-26"},{"lineNumber":1137,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, Integer.toString(fatParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1138,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1139,"author":{"gitId":"nihalzp"},"content":" if (!datetime.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1140,"author":{"gitId":"nihalzp"},"content":" LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-26"},{"lineNumber":1141,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, datetimeParsed.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":1142,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1143,"author":{"gitId":"nihalzp"},"content":" if (dietMap.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1144,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_NO_CHANGE_REQUESTED);","lastModifiedDate":"2023-10-26"},{"lineNumber":1145,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1146,"author":{"gitId":"nihalzp"},"content":" return dietMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":1147,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1148,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":69,"DaDevChia":113,"AlWo223":523,"yicheng-toh":84,"nihalzp":359}},{"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 static Ui uiInstance;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * Constructs a \u003ccode\u003eUi\u003c/code\u003e object, whose input \u003ccode\u003ein\u003c/code\u003e","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * and output \u003ccode\u003eout\u003c/code\u003e is the standard input and the standard","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * output, respectively.","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" private Ui() {","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" this(System.in, System.out);","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":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"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":26,"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":27,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" * @param in The \u003ccode\u003eInputStream\u003c/code\u003e accepting the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" * @param out The \u003ccode\u003ePrintStream\u003c/code\u003e displaying the program\u0027s output.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" private Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" assert in !\u003d null : \"Input stream `in` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" assert out !\u003d null : \"Print stream `out` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" this.out \u003d out;","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":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" * Returns the singleton instance of `Ui`.","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" * @return The singleton instance of `Ui`.","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" public static Ui getInstance() {","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" if (uiInstance \u003d\u003d null) {","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" uiInstance \u003d new Ui();","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" return uiInstance;","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" * Returns the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" * @return The user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" out.print(Message.PROMPT);","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" return in.nextLine();","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" }","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":" * Shows the \u003ccode\u003emessages\u003c/code\u003e in a beautiful format.","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" * @param messages The messages to be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" public void showMessages(String... messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" assert messages !\u003d null : \"Messages should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" out.print(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" for (String message : messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" out.println(Message.PREFIX_MESSAGE + message);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" out.println(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" * Shows message for exception \u003ccode\u003ee\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" * @param e The exception whose message will be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" assert e !\u003d null : \"Exception `e` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" showMessages(Message.PREFIX_EXCEPTION + e.getMessage());","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" public void showWelcome() {","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" showMessages(Message.MESSAGE_HELLO);","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":90}},{"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":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"class AddActivityCommandTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private AddActivityCommand addActivityCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" void execute_addsActivity_returnsConfirmationMessage() {","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this activity:\", run.toString(), \"You have tracked a total of 2 \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" \"activities. Keep pushing!\"};","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" void execute_addsFirstActivity_returnsFirstActivityMessage() {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"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":47,"author":{"gitId":"AlWo223"},"content":" \"first activity. This is just the beginning!\"};","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d addActivityCommand.execute(data);","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":54}},{"path":"src/test/java/athleticli/commands/activity/DeleteActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"class DeleteActivityCommandTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private DeleteActivityCommand deleteActivityCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" AddActivityCommand addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" void execute_validIndex_activityDeleted() throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Gotcha, I\u0027ve deleted this activity:\", run.toString(), \"You have tracked a total of 0 \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" \"activities. Keep pushing!\"};","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" deleteActivityCommand \u003d new DeleteActivityCommand(1);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d deleteActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" void execute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" deleteActivityCommand \u003d new DeleteActivityCommand(0);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e deleteActivityCommand.execute(data));","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"AlWo223":50}},{"path":"src/test/java/athleticli/commands/activity/EditActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"class EditActivityCommandTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private AddActivityCommand addActivityCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" addActivityCommand \u003d new AddActivityCommand(activity);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, 60);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" void execute_validIndex_activityEdited() throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" EditActivityCommand editActivityCommand \u003d new EditActivityCommand(run, 1);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" editActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this activity:\", run.toString(), \"You have tracked a total of 1 \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" \"activities. Keep pushing!\"};","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d editActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" assertEquals(run, data.getActivities().get(0));","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" void execute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" EditActivityCommand editActivityCommand \u003d new EditActivityCommand(run, 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e editActivityCommand.execute(data));","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"AlWo223":52}},{"path":"src/test/java/athleticli/commands/activity/ListActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"class ListActivityCommandTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" AddActivityCommand addActivityCommand \u003d new AddActivityCommand(activity);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" // execute twice for 2 activities","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" void execute_detailedFalse_printsShortList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(false);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"These are the activities you have tracked so far:\", \"1.\" + new Activity(CAPTION, DURATION,","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DATE), \"2.\" + new Activity(CAPTION, DURATION, DISTANCE, DATE)};","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" void execute_detailedTrue_printsDetailedList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(true);","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d listActivityCommand.printDetailedList(activities, activities.size());","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" void printList_validInput() {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(false);","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.printList(activities, activities.size());","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"These are the activities you have tracked so far:\", \"1.\" + new Activity(CAPTION, DURATION,","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DATE), \"2.\" + new Activity(CAPTION, DURATION, DISTANCE, DATE)};","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" void printDetailedList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(true);","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.printDetailedList(activities, activities.size());","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"These are the activities you have tracked so far:\", new Activity(CAPTION, DURATION,","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DATE).toDetailedString(),","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" new Activity(CAPTION, DURATION, DISTANCE, DATE).toDetailedString()};","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"AlWo223":77}},{"path":"src/test/java/athleticli/commands/activity/SetActivityGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"class SetActivityGoalCommandTest {","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private SetActivityGoalCommand setActivityGoalCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private ActivityGoal activityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" ActivityGoal.GoalType goalType \u003d ActivityGoal.GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" ActivityGoal.Sport sport \u003d ActivityGoal.Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" Timespan period \u003d Timespan.WEEKLY;","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, 10000);","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" setActivityGoalCommand \u003d new SetActivityGoalCommand(activityGoal);","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String caption \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" int distance \u003d 3000;","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" Run run \u003d new Run(caption, duration, distance, LocalDateTime.now(), 0);","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" AddActivityCommand addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" void execute() {","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d setActivityGoalCommand.execute(data);","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Alright, I\u0027ve added this activity goal:\", activityGoal.toString(data)};","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"AlWo223":50}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","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":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" * Tests the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"public class AddDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private AddDietCommand addDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" addDietCommand \u003d new AddDietCommand(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your \" + \"first diet. This is just the beginning!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d addDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","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":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":42}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Tests the delete diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"public class DeleteDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" private DeleteDietCommand deleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" void execute() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Noted. I\u0027ve removed this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 0 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d deleteDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" void execute_invalidIndex_expectException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(2);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietCommand.execute(data));","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":50}},{"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":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromFilledDietGoalList_expectCorrectMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" System.out.println(data.getDietGoals());","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"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":39,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\",};","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" }","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":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromEmptyDietGoalList_expectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(100);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" void execute_integerExceedListSize_expectAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(100);","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" fail();","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yicheng-toh":63}},{"path":"src/test/java/athleticli/commands/diet/EditDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Parameter;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"/*","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Contains the tests for EditDietCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"public class EditDietCommandTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 10;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 20;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 30;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" private static final int INDEX \u003d 1;","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEdited() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, 30, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoCaloriesGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(CALORIES, 20, 30, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoProteinGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, PROTEIN, 30, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoCarbGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, CARB, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoFatGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, 30, FAT, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoCaloriesProteinCarbFatGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoDateTimeGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, 30, 40, DATE_TIME);","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" void execute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(2, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e editDietCommand.execute(data));","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"nihalzp":150}},{"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.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"class EditDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e emptyInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledChangedInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalCarb;","lastModifiedDate":"2023-10-23"},{"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":" dietGoalCarb \u003d new DietGoal(\"carb\", 10000);","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" newDietGoalFats \u003d new DietGoal(\"fats\", 10);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" emptyInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalCarb);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals.add(newDietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"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":46,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d editDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" void execute_changeOneExistingInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledChangedInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10)\\n\\n\" + \"\\t2. carb intake progress: (0/10000)\\n\", \"Now you have 2 diet goal(s).\"};","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":73}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","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 list 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 ListDietCommandTest {","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 static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private ListDietCommand listDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" listDietCommand \u003d new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Here are the diets in your list:\", \"1. \" + diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 1 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d listDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","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":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":42}},{"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.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 SetDietGoalCommandTest {","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 DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalCarb;","lastModifiedDate":"2023-10-23"},{"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":" dietGoalCarb \u003d new DietGoal(\"carb\", 10000);","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalCarb);","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"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":40,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" }","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":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\\n\" + \"\\t2. carb intake progress: (0/10000)\\n\", \"Now you have 2 diet goal(s).\"};","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneExistingInputDietGoal_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","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":" assertThrows(AthletiException.class, () -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":70}},{"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/ActivityGoalTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import static athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static athleticli.data.activity.ActivityGoal.GoalType;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"import static athleticli.data.activity.ActivityGoal.Sport;","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"class ActivityGoalTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private ActivityList activityList;","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private ActivityGoal activityGoal;","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private Timespan period \u003d Timespan.WEEKLY;","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" private final LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" private final String caption \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" private final int distance \u003d 3000;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" void isAchieved_activityDistanceGoal_true() {","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" int targetValue \u003d 8000;","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.GENERAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" LocalDateTime date \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(caption, duration, distance, date);","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" ActivityList activityList \u003d data.getActivities();","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" boolean expected \u003d true;","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" boolean actual \u003d activityGoal.isAchieved(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" void isAchieved_runGoalWithNoTrackedRun_false() {","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" int targetValue \u003d 8000;","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" LocalDateTime date \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(caption, duration, distance, date);","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" ActivityList activityList \u003d data.getActivities();","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" boolean expected \u003d false;","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" boolean actual \u003d activityGoal.isAchieved(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" void isAchieved_goalAchievedOutsidePeriod_false() {","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" int targetValue \u003d 120;","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DURATION;","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.GENERAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateWithinPeriod \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateOutsidePeriod \u003d LocalDateTime.now().minusDays(15);","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" Activity activityWithinPeriod \u003d new Activity(caption, duration, distance, dateWithinPeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" Activity activityOutsidePeriod \u003d new Activity(caption, duration, distance, dateOutsidePeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" ActivityList activityList \u003d data.getActivities();","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" activityList.add(activityWithinPeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" activityList.add(activityOutsidePeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" boolean expected \u003d false;","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" boolean actual \u003d activityGoal.isAchieved(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" void getActivityClass() {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DURATION;","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, 0);","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" Class\u003c?\u003e expected \u003d Run.class;","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" Class\u003c?\u003e actual \u003d activityGoal.getActivityClass();","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"AlWo223":106}},{"path":"src/test/java/athleticli/data/activity/ActivityListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"class ActivityListTest {","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private ActivityList activityList;","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private Activity activityFirst;","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private Activity activitySecond;","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" activityList \u003d new ActivityList();","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateSecond \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateFirst \u003d LocalDateTime.now().minusDays(1);","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" activityFirst \u003d new Activity(CAPTION, DURATION, DISTANCE, dateFirst);","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" activitySecond \u003d new Activity(CAPTION, DURATION, DISTANCE, dateSecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" activityList.add(activityFirst);","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" activityList.add(activitySecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" void find() {","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.find(LocalDate.now()).get(0), activitySecond);","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.find(LocalDate.now().minusDays(1)).get(0), activityFirst);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" void sort() {","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" activityList.sort();","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.get(0), activitySecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.get(1), activityFirst);","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" void filterByTimespan() {","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" activityList.sort();","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e filteredList \u003d activityList.filterByTimespan(Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.get(0), activitySecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.get(1), activityFirst);","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" filteredList \u003d activityList.filterByTimespan(Timespan.DAILY);","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.get(0), activitySecond);","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.size(), 1);","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" void getTotalDistance_activity_totalDistance() {","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 2 * DISTANCE;","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDistance(Activity.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" void getTotalDistance_run_zero() {","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDistance(Run.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" void getTotalDuration_activity_totalTime() {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 2 * DURATION.toSecondOfDay();","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDuration(Activity.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" void getTotalDuration_run_zero() {","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDuration(Run.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"AlWo223":86}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class ActivityTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-24"},{"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 Activity activity;","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":" activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","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 testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, activity.getCaption());","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, activity.getMovingTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, activity.getDistance());","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, activity.getStartDateTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Activity] Sunday \u003d Runday | Distance: 18.12 km | Time: 1h 24m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, activity.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Activity - Sunday \u003d Runday - October 10, 2023 at 11:21 PM]\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" \"\\tDistance: 18.12 km Time: 1h 24m\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" \"\\tCalories: 0 kcal ...\";","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" public void generateDistanceStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateDistanceStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Distance: 18.12 km\";","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public void generateMovingTimeStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Time: 01:24:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" public void generateStartDateTimeStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" public void formatTwoColumns() {","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.formatTwoColumns(\"Distance: 18.12 km\", \"Time: 1h 24m\", 30);","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Distance: 18.12 km Time: 1h 24m\";","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" void generateShortMovingTimeStringOutput_hoursNotZero() {","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Time: 1h 24m\";","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateShortMovingTimeStringOutput();","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" void generateShortMovingTimeStringOutput_hoursZero() {","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" activity \u003d new Activity(CAPTION, LocalTime.of(0, 24, 20), DISTANCE, DATE);","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Time: 24m 20s\";","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateShortMovingTimeStringOutput();","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":92}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class CycleTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Cycling in the afternoon\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(2, 13);","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 40460;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 101;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 7, 14, 0);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Cycle cycle;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" cycle \u003d new Cycle(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","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":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, cycle.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, cycle.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, cycle.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, cycle.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" assertEquals(ELEVATION, cycle.getElevationGain());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double expected \u003d 18.25;","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" double actual \u003d cycle.calculateAverageSpeed();","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual, 0.005);","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":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"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-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" \" | \"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" + \"October 7, 2023 at 2:00 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, cycle.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Cycle - Cycling in the afternoon - October 7, 2023 at 2:00 PM]\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" + \"\\tDistance: 40.46 km Elevation Gain: 101 m\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" + \"\\tTime: 2h 13m Avg Speed: 18.25 km/h\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" + \"\\tCalories: 0 kcal Max Speed: tbd\";","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" String actual \u003d cycle.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" public void generateSpeedStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" String actual \u003d cycle.generateSpeedStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"18.25 km/h\";","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":68}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class RunTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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 LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-24"},{"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,","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, run.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, run.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, run.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, run.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" assertEquals(ELEVATION, run.getElevationGain());","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" public void calculateAveragePace() {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" double averagePace \u003d run.calculateAveragePace();","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" assertEquals(4.64, averagePace, 0.005);","lastModifiedDate":"2023-10-24"},{"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":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" public void convertAveragePaceToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"4:38\";","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" String actual \u003d run.convertAveragePaceToString();","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Run] Night Run | Distance: 18.12 km | Pace: 4:38 /km | Time: 1h 24m | \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, run.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Run - Night Run - October 10, 2023 at 11:21 PM]\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" + \"\\tDistance: 18.12 km Avg Pace: 4:41 /km\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" + \"\\tMoving Time: Time: 1h 25m Elevation Gain: 60 m\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" + \"\\tCalories: 0 kcal Steps: 0\";","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" String actual \u003d run.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":66}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class SwimTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Afternoon Swim\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(0, 35);","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 8, 29, 9, 45);","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final Swim.SwimmingStyle STYLE \u003d Swim.SwimmingStyle.BUTTERFLY;","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Swim swim;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" swim \u003d new Swim(CAPTION, DURATION, DISTANCE, DATE, STYLE);","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":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, swim.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, swim.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, swim.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, swim.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" assertEquals(STYLE, swim.getStyle());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageLapTime() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" assertEquals(105, swim.calculateAverageLapTime());","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" public void calculateLaps() {","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" assertEquals(20, swim.calculateLaps());","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Swim] Afternoon Swim | Distance: 1.00 km | Avg Lap Time: 105s | Time: 35m 0s | \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" \"August 29, 2023 at 9:45 AM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, swim.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Swim - Afternoon Swim - August 29, 2023 at 9:45 AM]\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" + \"\\tDistance: 1.00 km Time: 0h 35m\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" + \"\\tLaps: 20 Style: BUTTERFLY\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" + \"\\tAvg Lap Time: 105 s Calories: 0 kcal\";","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String actual \u003d swim.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":64}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"public class DietListTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20000;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30000;","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40000;","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private DietList dietList;","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" dietList \u003d new DietList();","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" void add_addOneDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assertEquals(1, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void remove_removeExistingDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" void remove_removeFromZeroDiets_expectIndexOutOfRangeError() {","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","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":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" void get_addOneDiet_expectGetSameDiet() {","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" assertEquals(diet, dietList.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" void size_initializeArgs_expectZero() {","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" void size_addTenDiets_expectTen() {","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c 10; i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" void testToString_oneExistingDiet_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet, dietList.toString());","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" void testToString_twoExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1 + \"\\n2. \" + diet2, dietList.toString());","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" void testToString_zeroExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" void testToString_threeExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" Diet diet3 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet3);","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1 + \"\\n2. \" + diet2 + \"\\n3. \" + diet3,","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":101}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"public class DietTest {","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 static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" void getCalories_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" assertEquals(CALORIES, diet.getCalories());","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 setCalories_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" diet.setCalories(10);","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, diet.getCalories());","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" void getProtein_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" assertEquals(PROTEIN, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" void setProtein_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" diet.setProtein(20);","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" assertEquals(20, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" void getCarb_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertEquals(CARB, diet.getCarb());","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 setCarb_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" diet.setCarb(30);","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" assertEquals(30, diet.getCarb());","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":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" void getFat_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" assertEquals(FAT, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" void setFat_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" diet.setFat(40);","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" assertEquals(40, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" void getDateTime_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" assertEquals(DATE_TIME, diet.getDateTime());","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" void setDateTime_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" LocalDateTime newDateTime \u003d LocalDateTime.of(2020, 10, 10, 10, 11);","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" diet.setDateTime(newDateTime);","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" assertEquals(newDateTime, diet.getDateTime());","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" void toString_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" String expected \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" \"Calories: 10000 Protein: 20000 Carb: 30000 Fat: 40000 Date: October 10, 2020 at 10:10 AM\";","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, diet.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":86}},{"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":"yicheng-toh"},"content":"import athleticli.commands.diet.DeleteDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.EditDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.ListDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.SetDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Swim;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal.GoalType;","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal.Sport;","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.checkEmptyDietArguments;","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.checkMissingDietArguments;","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.getValueForMarker;","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCalories;","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCarb;","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDate;","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDiet;","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDietEdit;","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"import static athleticli.ui.Parser.parseDietGoalDelete;","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":"import static athleticli.ui.Parser.parseDietGoalSetEdit;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDietIndex;","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseFat;","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseProtein;","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.splitCommandWordAndArgs;","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":"class ParserTest {","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_noArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" final String commandWithNoArgs \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithNoArgs).length, 2);","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":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_multipleArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" final String commandWithMultipleArgs \u003d \"set-diet-goal calories/1 carb/3\";","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithMultipleArgs).length, 2);","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":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" void parseCommand_unknownCommand_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" final String unknownCommand \u003d \"hello\";","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(unknownCommand));","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" void parseCommand_byeCommand_expectByeCommand() throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" final String byeCommand \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" assertInstanceOf(ByeCommand.class, parseCommand(byeCommand));","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_expectAddSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"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":82,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(AddSleepCommand.class, parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":92,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingEndExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingBothExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/ end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_invalidDatetimeExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"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":106,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":108,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_expectEditSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"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":112,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(EditSleepCommand.class, parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":113,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":114,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":122,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingEndExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":123,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":124,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":125,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":126,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":127,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":128,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingBothExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":129,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/ end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":130,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":131,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":132,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":133,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":134,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_invalidDatetimeExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":135,"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":136,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":137,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":138,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":139,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":140,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"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":142,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":143,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":145,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":146,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_expectDeleteSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":147,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep 1\";","lastModifiedDate":"2023-10-14"},{"lineNumber":148,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(DeleteSleepCommand.class, parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":149,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":150,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":151,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep abc\";","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":158,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_listSleepCommand_expectListSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":159,"author":{"gitId":"DaDevChia"},"content":" final String listSleepCommandString \u003d \"list-sleep\";","lastModifiedDate":"2023-10-14"},{"lineNumber":160,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(ListSleepCommand.class, parseCommand(listSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":161,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_setDietGoalCommand_expectSetDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"yicheng-toh"},"content":" final String setDietGoalCommandString \u003d \"set-diet-goal calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(SetDietGoalCommand.class, parseCommand(setDietGoalCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":167,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":168,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_editDietCommand_expectEditDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"yicheng-toh"},"content":" final String editDietGoalCommandString \u003d \"edit-diet-goal calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(EditDietGoalCommand.class, parseCommand(editDietGoalCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":173,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":174,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":175,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":176,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_listDietGoalCommand_expectListDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":177,"author":{"gitId":"yicheng-toh"},"content":" final String listDietCommandString \u003d \"list-diet-goal\";","lastModifiedDate":"2023-10-23"},{"lineNumber":178,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(ListDietGoalCommand.class, parseCommand(listDietCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":180,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":181,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":182,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_deleteDietGoalCommand_expectDeleteDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":183,"author":{"gitId":"yicheng-toh"},"content":" final String deleteDietGoalCommandString \u003d \"delete-diet-goal 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":184,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(DeleteDietGoalCommand.class, parseCommand(deleteDietGoalCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":185,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":186,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_expectAddDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(AddDietCommand.class, 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_deleteDietCommand_expectDeleteDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet 1\";","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(DeleteDietCommand.class, parseCommand(deleteDietCommandString));","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_listDietCommand_expectListDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"nihalzp"},"content":" final String listDietCommandString \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(ListDietCommand.class, parseCommand(listDietCommandString));","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_missingCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":208,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"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_missingProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":214,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"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_missingCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":220,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"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_addDietCommand_missingFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":226,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":227,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":228,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":229,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":230,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":231,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingDateTimeExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":232,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-25"},{"lineNumber":233,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":234,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":235,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":236,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":237,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":238,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":239,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/ protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":240,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":241,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":242,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":243,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":244,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":245,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":246,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/ carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":247,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":248,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":249,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":250,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":251,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":252,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":253,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/ fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":254,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":255,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":256,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":257,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":258,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":259,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":260,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/ datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":261,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":262,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":263,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":264,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":265,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyDateTimeExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":266,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":267,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":268,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":269,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":270,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":271,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":272,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":273,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/abc protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":274,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":275,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":276,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":277,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":278,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":279,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":280,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/abc carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":281,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":282,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":283,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":284,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":285,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":286,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":287,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/abc fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":288,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":289,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":290,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":291,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":292,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":293,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":294,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/abc datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":295,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":296,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":297,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":298,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":299,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidDateTimeFormatExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":300,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString1 \u003d \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06\";","lastModifiedDate":"2023-10-25"},{"lineNumber":301,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString2 \u003d \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":302,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString3 \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":303,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/16-10-2023 10:00:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":304,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString1));","lastModifiedDate":"2023-10-25"},{"lineNumber":305,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString2));","lastModifiedDate":"2023-10-25"},{"lineNumber":306,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString3));","lastModifiedDate":"2023-10-25"},{"lineNumber":307,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":308,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":309,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":310,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":311,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":312,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/-1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":313,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":314,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":315,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":316,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":317,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeProteinExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":318,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":319,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/-2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":320,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":321,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":322,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":323,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":324,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeCarbExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":325,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":326,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/-3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":327,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":328,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":329,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":330,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":331,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeFatExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":332,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":333,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/-4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":334,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":335,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":336,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":337,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":338,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":339,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet abc\";","lastModifiedDate":"2023-10-15"},{"lineNumber":340,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":341,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":342,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":343,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":344,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_emptyIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":345,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":346,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":347,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":348,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":349,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":350,"author":{"gitId":"nihalzp"},"content":" void parseDietIndex_validIndex_returnIndex() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":351,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":352,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseDietIndex(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":353,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":354,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":355,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":356,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":357,"author":{"gitId":"nihalzp"},"content":" void parseDietIndex_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":358,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":359,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietIndex(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":360,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":361,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":362,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":363,"author":{"gitId":"nihalzp"},"content":" void parseDietIndex_nonPositiveIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":364,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"0\";","lastModifiedDate":"2023-10-25"},{"lineNumber":365,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietIndex(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":366,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":367,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":368,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":369,"author":{"gitId":"nihalzp"},"content":" void parseDiet_emptyInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":370,"author":{"gitId":"nihalzp"},"content":" String emptyInput \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":371,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDiet(emptyInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":372,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":373,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":374,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":375,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingCalories_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":376,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":377,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":378,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":379,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":380,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":381,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":382,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":383,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":384,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":385,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":386,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":387,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingProtein_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":388,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":389,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":390,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":391,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":392,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":393,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":394,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":395,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":396,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":397,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":398,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":399,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingCarb_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":400,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":401,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":402,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":403,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":404,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":405,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":406,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":407,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":408,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":409,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":410,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":411,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingFat_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":412,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":413,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":414,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":415,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":416,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":417,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":418,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":419,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":420,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":421,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":422,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":423,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingDatetime_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":424,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":425,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":426,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":427,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":428,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":429,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":430,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":431,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":432,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":433,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":434,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":435,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":436,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyCalories_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":437,"author":{"gitId":"nihalzp"},"content":" String emptyCalories \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":438,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":439,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":440,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":441,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":442,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":443,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(emptyCalories, nonEmptyProtein, nonEmptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":444,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":445,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":446,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":447,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":448,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyProtein_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":449,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":450,"author":{"gitId":"nihalzp"},"content":" String emptyProtein \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":451,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":452,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":453,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":454,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":455,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, emptyProtein, nonEmptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":456,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":457,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":458,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":459,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":460,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyCarb_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":461,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":462,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":463,"author":{"gitId":"nihalzp"},"content":" String emptyCarb \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":464,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":465,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":466,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":467,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, nonEmptyProtein, emptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":468,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":469,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":470,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":471,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":472,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyFat_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":473,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":474,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":475,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":476,"author":{"gitId":"nihalzp"},"content":" String emptyFat \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":477,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":478,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":479,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, nonEmptyProtein, nonEmptyCarb, emptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":480,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":481,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":482,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":483,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":484,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyDatetime_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":485,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":486,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":487,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":488,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"4\";","lastModifiedDate":"2023-10-25"},{"lineNumber":489,"author":{"gitId":"nihalzp"},"content":" String emptyDatetime \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":490,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":491,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, nonEmptyProtein, nonEmptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":492,"author":{"gitId":"nihalzp"},"content":" emptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":493,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":494,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":495,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":496,"author":{"gitId":"nihalzp"},"content":" void parseCalories_validCalories_returnCalories() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":497,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":498,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseCalories(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":499,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":500,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":501,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":502,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":503,"author":{"gitId":"nihalzp"},"content":" void parseCalories_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":504,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":505,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCalories(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":506,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":507,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":508,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":509,"author":{"gitId":"nihalzp"},"content":" void parseCalories_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":510,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":511,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCalories(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":512,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":513,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":514,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":515,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":516,"author":{"gitId":"nihalzp"},"content":" void parseProtein_validProtein_returnProtein() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":517,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":518,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseProtein(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":519,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":520,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":521,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":522,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":523,"author":{"gitId":"nihalzp"},"content":" void parseProtein_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":524,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":525,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseProtein(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":526,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":527,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":528,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":529,"author":{"gitId":"nihalzp"},"content":" void parseProtein_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":530,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":531,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseProtein(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":532,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":533,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":534,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":535,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":536,"author":{"gitId":"nihalzp"},"content":" void parseCarb_validCarb_returnCarb() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":537,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":538,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseCarb(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":539,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":540,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":541,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":542,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":543,"author":{"gitId":"nihalzp"},"content":" void parseCarb_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":544,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":545,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCarb(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":546,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":547,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":548,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":549,"author":{"gitId":"nihalzp"},"content":" void parseCarb_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":550,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":551,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCarb(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":552,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":553,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":554,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":555,"author":{"gitId":"nihalzp"},"content":" void parseFat_validFat_returnFat() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":556,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":557,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseFat(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":558,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":559,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":560,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":561,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":562,"author":{"gitId":"nihalzp"},"content":" void parseFat_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":563,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":564,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseFat(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":565,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":566,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":567,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":568,"author":{"gitId":"nihalzp"},"content":" void parseFat_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":569,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":570,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseFat(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":571,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":572,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":573,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":574,"author":{"gitId":"nihalzp"},"content":" void getValueForMarker_validInput_returnValue() {","lastModifiedDate":"2023-10-26"},{"lineNumber":575,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2 calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":576,"author":{"gitId":"nihalzp"},"content":" String caloriesActual \u003d getValueForMarker(validInput, Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":577,"author":{"gitId":"nihalzp"},"content":" String proteinActual \u003d getValueForMarker(validInput, Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":578,"author":{"gitId":"nihalzp"},"content":" String carbActual \u003d getValueForMarker(validInput, Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":579,"author":{"gitId":"nihalzp"},"content":" String fatActual \u003d getValueForMarker(validInput, Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":580,"author":{"gitId":"nihalzp"},"content":" String datetimeActual \u003d getValueForMarker(validInput, Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":581,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1\", caloriesActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":582,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"2\", proteinActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":583,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"3\", carbActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":584,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"4\", fatActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":585,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"2023-10-06 10:00\", datetimeActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":586,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":587,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":588,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":589,"author":{"gitId":"nihalzp"},"content":" void getValueForMarker_invalidInput_returnEmptyString() {","lastModifiedDate":"2023-10-26"},{"lineNumber":590,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"2 calorie/1 proteins/2 carbs/3 fats/4 datetime/2023-10-06\";","lastModifiedDate":"2023-10-26"},{"lineNumber":591,"author":{"gitId":"nihalzp"},"content":" String caloriesActual \u003d getValueForMarker(invalidInput, Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":592,"author":{"gitId":"nihalzp"},"content":" String proteinActual \u003d getValueForMarker(invalidInput, Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":593,"author":{"gitId":"nihalzp"},"content":" String carbActual \u003d getValueForMarker(invalidInput, Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":594,"author":{"gitId":"nihalzp"},"content":" String fatActual \u003d getValueForMarker(invalidInput, Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":595,"author":{"gitId":"nihalzp"},"content":" String datetimeActual \u003d getValueForMarker(invalidInput, Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":596,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", caloriesActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":597,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", proteinActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":598,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", carbActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":599,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", fatActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":600,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", datetimeActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":601,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":602,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":603,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":604,"author":{"gitId":"nihalzp"},"content":" void parseDietEdit_validInput_returnDietEdit() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":605,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2 calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":606,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e actual \u003d parseDietEdit(validInput);","lastModifiedDate":"2023-10-26"},{"lineNumber":607,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e expected \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":608,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CALORIES_SEPARATOR, \"1\");","lastModifiedDate":"2023-10-26"},{"lineNumber":609,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.PROTEIN_SEPARATOR, \"2\");","lastModifiedDate":"2023-10-26"},{"lineNumber":610,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CARB_SEPARATOR, \"3\");","lastModifiedDate":"2023-10-26"},{"lineNumber":611,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.FAT_SEPARATOR, \"4\");","lastModifiedDate":"2023-10-26"},{"lineNumber":612,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.DATETIME_SEPARATOR, \"2023-10-06T10:00\");","lastModifiedDate":"2023-10-26"},{"lineNumber":613,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":614,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":615,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":616,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":617,"author":{"gitId":"nihalzp"},"content":" void parseDietEdit_someMarkersPresent_returnDietEdit() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":618,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2 calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-26"},{"lineNumber":619,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e actual \u003d parseDietEdit(validInput);","lastModifiedDate":"2023-10-26"},{"lineNumber":620,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e expected \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":621,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CALORIES_SEPARATOR, \"1\");","lastModifiedDate":"2023-10-26"},{"lineNumber":622,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.PROTEIN_SEPARATOR, \"2\");","lastModifiedDate":"2023-10-26"},{"lineNumber":623,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CARB_SEPARATOR, \"3\");","lastModifiedDate":"2023-10-26"},{"lineNumber":624,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":625,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":626,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":627,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":628,"author":{"gitId":"nihalzp"},"content":" void parseDietEdit_zeroValidInput_throwAthletiException() {","lastModifiedDate":"2023-10-26"},{"lineNumber":629,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"2 calorie/1 proteins/2 carbs/3 fats/4 datetime/2023-10-06\";","lastModifiedDate":"2023-10-26"},{"lineNumber":630,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietEdit(invalidInput));","lastModifiedDate":"2023-10-26"},{"lineNumber":631,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":632,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":633,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":634,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_noInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":635,"author":{"gitId":"yicheng-toh"},"content":" String oneValidOneInvalidGoalString \u003d \" \";","lastModifiedDate":"2023-10-23"},{"lineNumber":636,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(oneValidOneInvalidGoalString));","lastModifiedDate":"2023-10-23"},{"lineNumber":637,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":638,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":639,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":640,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_oneValidOneInvalidGoal_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":641,"author":{"gitId":"yicheng-toh"},"content":" String oneValidOneInvalidGoalString \u003d \"calories/60 protein/protine\";","lastModifiedDate":"2023-10-15"},{"lineNumber":642,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(oneValidOneInvalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":643,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":644,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":645,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":646,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_zeroTargetValue_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":647,"author":{"gitId":"yicheng-toh"},"content":" String zeroTargetValueGoalString \u003d \"calories/0\";","lastModifiedDate":"2023-10-15"},{"lineNumber":648,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(zeroTargetValueGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":649,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":650,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":651,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":652,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_oneInvalidGoal_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":653,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calories/caloreis protein/protein\";","lastModifiedDate":"2023-10-15"},{"lineNumber":654,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":655,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":656,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":657,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":658,"author":{"gitId":"AlWo223"},"content":" void parseActivityIndex_validIndex_returnIndex() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":659,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-23"},{"lineNumber":660,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseActivityIndex(\"5\");","lastModifiedDate":"2023-10-23"},{"lineNumber":661,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":662,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":663,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":664,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":665,"author":{"gitId":"AlWo223"},"content":" void parseActivityIndex_invalidIndex_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":666,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseActivityIndex(\"abc\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":667,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":668,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":669,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":670,"author":{"gitId":"AlWo223"},"content":" void parseActivityEdit_validInput_returnActivityEdit() {","lastModifiedDate":"2023-10-25"},{"lineNumber":671,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"1 Morning Run duration/01:00:00 distance/10000 datetime/2021-09-01 06:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":672,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseActivityEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":673,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":674,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":675,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":676,"author":{"gitId":"AlWo223"},"content":" void parseActivityEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":677,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":678,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseActivityEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":679,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":680,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":681,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":682,"author":{"gitId":"AlWo223"},"content":" void parseRunEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":683,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":684,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseRunEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":685,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":686,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":687,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":688,"author":{"gitId":"AlWo223"},"content":" void parseRunEdit_validInput_returnRunEdit() {","lastModifiedDate":"2023-10-23"},{"lineNumber":689,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":690,"author":{"gitId":"nihalzp"},"content":" \"2 Evening Ride duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 elevation/1000\";","lastModifiedDate":"2023-10-25"},{"lineNumber":691,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseRunEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":692,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":693,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":694,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":695,"author":{"gitId":"AlWo223"},"content":" void parseCycleEdit_validInput_returnRunEdit() {","lastModifiedDate":"2023-10-23"},{"lineNumber":696,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":697,"author":{"gitId":"nihalzp"},"content":" \"2 Evening Ride duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 elevation/1000\";","lastModifiedDate":"2023-10-25"},{"lineNumber":698,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseCycleEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":699,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":700,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":701,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":702,"author":{"gitId":"AlWo223"},"content":" void parseCycleEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":703,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":704,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseCycleEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":705,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":706,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":707,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":708,"author":{"gitId":"AlWo223"},"content":" void parseSwimEdit_validInput_noExceptionThrown() {","lastModifiedDate":"2023-10-25"},{"lineNumber":709,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":710,"author":{"gitId":"nihalzp"},"content":" \"2 Evening Ride duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 style/freestyle\";","lastModifiedDate":"2023-10-25"},{"lineNumber":711,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseSwimEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":712,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":713,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":714,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":715,"author":{"gitId":"AlWo223"},"content":" void parseSwimEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":716,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":717,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseRunEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":718,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":719,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":720,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":721,"author":{"gitId":"AlWo223"},"content":" void parseActivityEditIndex_validInput_returnIndex() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":722,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-23"},{"lineNumber":723,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseActivityEditIndex(\"5\");","lastModifiedDate":"2023-10-23"},{"lineNumber":724,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":725,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":726,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":727,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":728,"author":{"gitId":"AlWo223"},"content":" void parseActivityListDetail_flagPresent_returnTrue() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":729,"author":{"gitId":"AlWo223"},"content":" String input \u003d \"list-activity -d\";","lastModifiedDate":"2023-10-23"},{"lineNumber":730,"author":{"gitId":"AlWo223"},"content":" assertTrue(Parser.parseActivityListDetail(input));","lastModifiedDate":"2023-10-23"},{"lineNumber":731,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":732,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":733,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":734,"author":{"gitId":"AlWo223"},"content":" void parseActivityListDetail_flagAbsent_returnFalse() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":735,"author":{"gitId":"AlWo223"},"content":" String input \u003d \"list-activity\";","lastModifiedDate":"2023-10-23"},{"lineNumber":736,"author":{"gitId":"AlWo223"},"content":" assertFalse(Parser.parseActivityListDetail(input));","lastModifiedDate":"2023-10-23"},{"lineNumber":737,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":738,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":739,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":740,"author":{"gitId":"AlWo223"},"content":" void parseActivity_validInput_activityParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":741,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"Morning Run duration/01:00:00 distance/10000 datetime/2021-09-01 06:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":742,"author":{"gitId":"AlWo223"},"content":" Activity actual \u003d Parser.parseActivity(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":743,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.parse(\"01:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":744,"author":{"gitId":"nihalzp"},"content":" LocalDateTime time \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":745,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 06:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":746,"author":{"gitId":"AlWo223"},"content":" Activity expected \u003d new Activity(\"Morning Run\", duration, 10000, time);","lastModifiedDate":"2023-10-25"},{"lineNumber":747,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getCaption(), expected.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":748,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getMovingTime(), expected.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":749,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getDistance(), expected.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":750,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStartDateTime(), expected.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":751,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":752,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":753,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":754,"author":{"gitId":"AlWo223"},"content":" void parseActivityGoal_validInput_activityGoalParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":755,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"sport/running type/distance period/weekly target/10000\";","lastModifiedDate":"2023-10-27"},{"lineNumber":756,"author":{"gitId":"AlWo223"},"content":" ActivityGoal actual \u003d Parser.parseActivityGoal(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":757,"author":{"gitId":"AlWo223"},"content":" ActivityGoal expected \u003d new ActivityGoal(Goal.Timespan.WEEKLY, ActivityGoal.GoalType.DISTANCE,","lastModifiedDate":"2023-10-27"},{"lineNumber":758,"author":{"gitId":"AlWo223"},"content":" ActivityGoal.Sport.RUNNING, 10000);","lastModifiedDate":"2023-10-27"},{"lineNumber":759,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getTimespan(), expected.getTimespan());","lastModifiedDate":"2023-10-27"},{"lineNumber":760,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getGoalType(), expected.getGoalType());","lastModifiedDate":"2023-10-27"},{"lineNumber":761,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getSport(), expected.getSport());","lastModifiedDate":"2023-10-27"},{"lineNumber":762,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getTargetValue(), expected.getTargetValue());","lastModifiedDate":"2023-10-27"},{"lineNumber":763,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":764,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":765,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":766,"author":{"gitId":"AlWo223"},"content":" void parseSport_validInput_sportParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":767,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"running\";","lastModifiedDate":"2023-10-27"},{"lineNumber":768,"author":{"gitId":"AlWo223"},"content":" Sport actual \u003d Parser.parseSport(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":769,"author":{"gitId":"AlWo223"},"content":" Sport expected \u003d Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":770,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":771,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":772,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":773,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":774,"author":{"gitId":"AlWo223"},"content":" void parseSport_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":775,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-27"},{"lineNumber":776,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseSport(invalidInput));","lastModifiedDate":"2023-10-27"},{"lineNumber":777,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":778,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":779,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":780,"author":{"gitId":"AlWo223"},"content":" void parseGoalType_validInput_goalTypeParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":781,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"distance\";","lastModifiedDate":"2023-10-27"},{"lineNumber":782,"author":{"gitId":"AlWo223"},"content":" GoalType actual \u003d Parser.parseGoalType(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":783,"author":{"gitId":"AlWo223"},"content":" GoalType expected \u003d GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":784,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":785,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":786,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":787,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":788,"author":{"gitId":"AlWo223"},"content":" void parsePeriod_validInput_periodParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":789,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"weekly\";","lastModifiedDate":"2023-10-27"},{"lineNumber":790,"author":{"gitId":"AlWo223"},"content":" Timespan actual \u003d Parser.parsePeriod(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":791,"author":{"gitId":"AlWo223"},"content":" Timespan expected \u003d Timespan.WEEKLY;","lastModifiedDate":"2023-10-27"},{"lineNumber":792,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":793,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":794,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":795,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":796,"author":{"gitId":"AlWo223"},"content":" void parsePeriod_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":797,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-27"},{"lineNumber":798,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parsePeriod(invalidInput));","lastModifiedDate":"2023-10-27"},{"lineNumber":799,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":800,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":801,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":802,"author":{"gitId":"AlWo223"},"content":" void parseTarget_validInput_targetParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":803,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"10000\";","lastModifiedDate":"2023-10-27"},{"lineNumber":804,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseTarget(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":805,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 10000;","lastModifiedDate":"2023-10-27"},{"lineNumber":806,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":807,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":808,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":809,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":810,"author":{"gitId":"AlWo223"},"content":" void parseTarget_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":811,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-27"},{"lineNumber":812,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseTarget(invalidInput));","lastModifiedDate":"2023-10-27"},{"lineNumber":813,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":814,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":815,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":816,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityGoalArguments_missingSport_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":817,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingActivityGoalArguments(-1, 1, 1, 1));","lastModifiedDate":"2023-10-27"},{"lineNumber":818,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":819,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":820,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":821,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityGoalArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-27"},{"lineNumber":822,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingActivityGoalArguments(1, 1, 1, 1));","lastModifiedDate":"2023-10-27"},{"lineNumber":823,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":824,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":825,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":826,"author":{"gitId":"AlWo223"},"content":" void parseDuration_validInput_durationParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":827,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"01:00:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":828,"author":{"gitId":"AlWo223"},"content":" LocalTime actual \u003d Parser.parseDuration(validInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":829,"author":{"gitId":"AlWo223"},"content":" LocalTime expected \u003d LocalTime.parse(\"01:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":830,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":831,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":832,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":833,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":834,"author":{"gitId":"AlWo223"},"content":" void parseDuration_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":835,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":836,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseDuration(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":837,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":838,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":839,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":840,"author":{"gitId":"AlWo223"},"content":" void parseDateTime_validInput_dateTimeParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":841,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"2021-09-01 06:00\";","lastModifiedDate":"2023-10-23"},{"lineNumber":842,"author":{"gitId":"AlWo223"},"content":" LocalDateTime actual \u003d Parser.parseDateTime(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":843,"author":{"gitId":"nihalzp"},"content":" LocalDateTime expected \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":844,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 06:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":845,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":846,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":847,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":848,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":849,"author":{"gitId":"AlWo223"},"content":" void parseDateTime_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":850,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":851,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseDateTime(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":852,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":853,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":854,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":855,"author":{"gitId":"nihalzp"},"content":" void parseDate_validInput_dateParsed() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":856,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2021-09-01\";","lastModifiedDate":"2023-10-25"},{"lineNumber":857,"author":{"gitId":"nihalzp"},"content":" LocalDate actual \u003d parseDate(validInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":858,"author":{"gitId":"nihalzp"},"content":" LocalDate expected \u003d LocalDate.parse(\"2021-09-01\");","lastModifiedDate":"2023-10-25"},{"lineNumber":859,"author":{"gitId":"nihalzp"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-25"},{"lineNumber":860,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":861,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":862,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":863,"author":{"gitId":"nihalzp"},"content":" void parseDate_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":864,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-25"},{"lineNumber":865,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDate(invalidInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":866,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":867,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":868,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":869,"author":{"gitId":"nihalzp"},"content":" void parseDate_invalidInputWithTime_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":870,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"2021-09-01 06:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":871,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDate(invalidInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":872,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":873,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":874,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":875,"author":{"gitId":"AlWo223"},"content":" void parseDistance_validInput_distanceParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":876,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"10000\";","lastModifiedDate":"2023-10-23"},{"lineNumber":877,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseDistance(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":878,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 10000;","lastModifiedDate":"2023-10-23"},{"lineNumber":879,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":880,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":881,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":882,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":883,"author":{"gitId":"AlWo223"},"content":" void parseDistance_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":884,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":885,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseDistance(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":886,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":887,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":888,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":889,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityArguments_missingDuration_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":890,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingActivityArguments(-1, 1, 1));","lastModifiedDate":"2023-10-25"},{"lineNumber":891,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":892,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":893,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":894,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":895,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingActivityArguments(1, 1, 1));","lastModifiedDate":"2023-10-23"},{"lineNumber":896,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":897,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":898,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":899,"author":{"gitId":"AlWo223"},"content":" void parseRunCycle_validInput_activityParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":900,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":901,"author":{"gitId":"nihalzp"},"content":" \"Morning Run duration/01:00:00 distance/10000 datetime/2021-09-01 06:00 elevation/60\";","lastModifiedDate":"2023-10-25"},{"lineNumber":902,"author":{"gitId":"AlWo223"},"content":" Run actual \u003d (Run) Parser.parseRunCycle(validInput, true);","lastModifiedDate":"2023-10-23"},{"lineNumber":903,"author":{"gitId":"AlWo223"},"content":" LocalTime movingTime \u003d LocalTime.parse(\"01:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":904,"author":{"gitId":"nihalzp"},"content":" LocalDateTime time \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":905,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 06:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":906,"author":{"gitId":"AlWo223"},"content":" Run expected \u003d new Run(\"Morning Run\", movingTime, 10000, time, 60);","lastModifiedDate":"2023-10-25"},{"lineNumber":907,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getCaption(), expected.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":908,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getMovingTime(), expected.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":909,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getDistance(), expected.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":910,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStartDateTime(), expected.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":911,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getElevationGain(), expected.getElevationGain());","lastModifiedDate":"2023-10-23"},{"lineNumber":912,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":913,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":914,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":915,"author":{"gitId":"AlWo223"},"content":" void parseElevation_validInput_elevationParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":916,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":917,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseElevation(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":918,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 60;","lastModifiedDate":"2023-10-23"},{"lineNumber":919,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":920,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":921,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":922,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":923,"author":{"gitId":"AlWo223"},"content":" void parseElevation_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":924,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":925,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseElevation(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":926,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":927,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":928,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":929,"author":{"gitId":"AlWo223"},"content":" void checkMissingRunCycleArguments_missingElevation_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":930,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingRunCycleArguments(1, 1, 1, -1));","lastModifiedDate":"2023-10-25"},{"lineNumber":931,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":932,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":933,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":934,"author":{"gitId":"AlWo223"},"content":" void checkMissingRunCycleArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":935,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingRunCycleArguments(1, 1, 1, 1));","lastModifiedDate":"2023-10-23"},{"lineNumber":936,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":937,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":938,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":939,"author":{"gitId":"AlWo223"},"content":" void checkMissingSwimArguments_missingStyle_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":940,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingSwimArguments(1, 1, 1, -1));","lastModifiedDate":"2023-10-25"},{"lineNumber":941,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":942,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":943,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":944,"author":{"gitId":"AlWo223"},"content":" void checkMissingSwimArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":945,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingSwimArguments(1, 1, 1, 1));","lastModifiedDate":"2023-10-23"},{"lineNumber":946,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":947,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":948,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":949,"author":{"gitId":"AlWo223"},"content":" void checkEmptyActivityArguments_emptyCaption_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":950,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkEmptyActivityArguments(\"\", \" \", \" \", \" \"));","lastModifiedDate":"2023-10-25"},{"lineNumber":951,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":952,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":953,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":954,"author":{"gitId":"AlWo223"},"content":" void checkEmptyActivityArguments_noEmptyArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":955,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkEmptyActivityArguments(\"1\", \"1\", \"1\", \"1\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":956,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":957,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":958,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":959,"author":{"gitId":"AlWo223"},"content":" void parseSwim_validInput_swimParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":960,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":961,"author":{"gitId":"nihalzp"},"content":" \"Evening Swim duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 style/freestyle\";","lastModifiedDate":"2023-10-25"},{"lineNumber":962,"author":{"gitId":"AlWo223"},"content":" Swim actual \u003d (Swim) Parser.parseSwim(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":963,"author":{"gitId":"AlWo223"},"content":" LocalTime movingTime \u003d LocalTime.parse(\"02:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":964,"author":{"gitId":"nihalzp"},"content":" LocalDateTime time \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":965,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 18:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":966,"author":{"gitId":"AlWo223"},"content":" Swim expected \u003d new Swim(\"Evening Swim\", movingTime, 20000, time, Swim.SwimmingStyle.FREESTYLE);","lastModifiedDate":"2023-10-25"},{"lineNumber":967,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getCaption(), expected.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":968,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getMovingTime(), expected.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":969,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getDistance(), expected.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":970,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStartDateTime(), expected.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":971,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStyle(), expected.getStyle());","lastModifiedDate":"2023-10-23"},{"lineNumber":972,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":973,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":974,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":975,"author":{"gitId":"AlWo223"},"content":" void parseSwimmingStyle_validInput_styleParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":976,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"freestyle\";","lastModifiedDate":"2023-10-23"},{"lineNumber":977,"author":{"gitId":"AlWo223"},"content":" Swim.SwimmingStyle actual \u003d Parser.parseSwimmingStyle(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":978,"author":{"gitId":"AlWo223"},"content":" Swim.SwimmingStyle expected \u003d Swim.SwimmingStyle.FREESTYLE;","lastModifiedDate":"2023-10-23"},{"lineNumber":979,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":980,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":981,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":982,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":983,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_repeatedDietGoal_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":984,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calories/1 calories/1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":985,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-23"},{"lineNumber":986,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":987,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":988,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":989,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_invalidNutrient_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":990,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calorie/1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":991,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-23"},{"lineNumber":992,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":993,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":994,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":995,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalDelete_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":996,"author":{"gitId":"yicheng-toh"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-23"},{"lineNumber":997,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalDelete(nonIntegerInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":998,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":999,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":1000,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":1001,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalDelete_nonPositiveIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":1002,"author":{"gitId":"yicheng-toh"},"content":" String nonIntegerInput \u003d \"0\";","lastModifiedDate":"2023-10-23"},{"lineNumber":1003,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalDelete(nonIntegerInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":1004,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":1005,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":30,"DaDevChia":87,"AlWo223":299,"yicheng-toh":77,"nihalzp":512}},{"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":"AlWo223"},"content":"if [ -e \"data/athleticli.bin\" ]","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"then","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" rm data/athleticli.bin","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"fi","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"java -jar $(find ../build/libs/ -mindepth 1 -print -quit) \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"diff -w EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" echo \"Test passed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" echo \"Test failed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"skylee03":1,"AlWo223":5,"-":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":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: About Us","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"|-----------------------------------------------------------|:-----------------:|:----------------------------------------:|:-----------------------------------------:|","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"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":9,"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":10,"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":11,"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":12,"author":{"gitId":"skylee03"},"content":"| ![](https://avatars.githubusercontent.com/u/24489025?s\u003d100) | Yang Ming-Tian | [Github](https://github.com/skylee03) | [Portfolio](docs/team/skylee03.md) |","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"skylee03":5,"yicheng-toh":6,"-":2}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: Developer Guide","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"- Table of Contents","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"{:toc}","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"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":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"## Design","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"This section provides a high-level explanation of the design and implementation of AthletiCLI, ","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"supported by UML diagrams and short code snippets to illustrate the flow of data and interactions between the ","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"components.","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"#### [Implemented] Setting Up of Diet Goals","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"### Architecture","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"**Main components of the architecture**","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"**`AthletiCLI`** is in charge of the app launch and shut down.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":"The bulk of the AthletiCLI’s work is done by the following components, with each of them corresponds to a package:","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"* [`UI`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/ui): The UI of AthletiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"* [`Storage`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/storage): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"* [`Data`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/data): Holds the data of AthletiCLI in memory.","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"* [`Commands`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/commands): The command executors.","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"[`Exceptions`](https://github.com/AY2324S1-CS2113-T17-1/tp/tree/master/src/main/java/athleticli/exceptions) represents exceptions used by multiple other components.","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"### UI Component","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":"### Storage Component","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"### Data Component","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":"### Commands Component","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"## Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"### Diet Management in AthletiCLI","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"#### [Implemented] Setting Up, Editing, Deleting, Listing, and Finding Diets","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":"Regardless of the operation you are performing on diets (setting up, editing, deleting, listing, or finding), the process follows a general five-step pattern in AthletiCLI:","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"1. **Input Processing**: The user\u0027s input is passed through AthletiCLI to the Parser Class. Examples of user inputs include:","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" - \"add-diet calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00\" for adding a diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" - \"edit-diet 1 calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00\" for editing a diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" - \"delete-diet 1\" for deleting a diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" - \"list-diet\" for listing all diets.","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" - \"find-diet 2021-09-01\" for finding diets of a particular date.","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":"2. **Command Identification**: The Parser Class identifies the type of diet operation and passes the necessary parameters.","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"3. **Command Creation**: An instance of the corresponding command class is created (e.g., AddDietCommand, EditDietCommand, etc.) and returned to AthletiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":"4. **Command Execution**: AthletiCLI executes the command, interacting with the data instance of DietList to perform the required operation.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"5. **Result Display**: A message is returned post-execution and passed through AthletiCLI to the UI for display to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":"By following these general steps, AthletiCLI ensures a streamlined process for managing diet-related tasks.","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":"### [Implemented] Setting Up of Diet Goals","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":"This following sequence diagram show how the \u0027set-diet-goal\u0027 command works:","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":"\u003cp align\u003d\"center\" width\u003d\"100%\"\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" \u003cimg width\u003d\"80%\" src\u003d\"images/setDietGoalUmlSequenceDiagram.svg\" alt\u003d\"\u0027set-diet-goal\u0027 Sequence Diagram\"/\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":"\u003c/p\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":"Step 1. The input from the user (\"set-diet-goal fats/1\") runs through AthletiCLI to the Parser Class.","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"yicheng-toh"},"content":"Step 2. The Parser Class will identify the request as setting up a diet goal and pass in the parameters","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"yicheng-toh"},"content":"\"fats/1\".","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"yicheng-toh"},"content":"Step 3. A temporary dietGoalList is created to store newly created diet goals.","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"yicheng-toh"},"content":"Step 4. The inputs are verified against our lists of approved diet goals.","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"yicheng-toh"},"content":"Step 5. For each of the diet goals that are valid, a dietGoal object will be created and stored in the ","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"yicheng-toh"},"content":"temporary dietGoalList.","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"yicheng-toh"},"content":"Step 6. The Parser then creates for an instance of SetDietGoalCommand and returns the instance to ","lastModifiedDate":"2023-10-24"},{"lineNumber":93,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI.","lastModifiedDate":"2023-10-24"},{"lineNumber":94,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"yicheng-toh"},"content":"Step 7. AthletiCLI will execute the SetDietGoalCommand. This adds the dietGoals that are present in the ","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"yicheng-toh"},"content":"temporary list into the data instance of DietGoalList which will be kept for records.","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"yicheng-toh"},"content":"Step 8. After executing the SetDietGoalCommand, SetDietGoalCommand returns a message that is passed to ","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI to be passed to UI(not shown) for display.","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"#### [Implemented] Adding activities","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":"The `add-activity` feature allows users to add a new activity into the application.","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":"These are the main components behind the architecture of the `add-activity` feature:","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"1. `AthletiCLI`: faciliates the mechanism. It captures the input and calls the parser and execution.","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"2. `Parser`: parses the user input and generates the appropriate command object and activity ","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" instance.","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"3. `AddActivityCommand`: encapsulates the execution of the `add-activity` command. It adds ","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" the activity to the data.","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"4. `Activity`: represents the activity that is to be added.","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"5. `Data`: holds current state of the activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"6. `ActivityList`: maintains the list of all added activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":"Given below is an example usage scenario and how the add mechanism behaves at each step.","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":"**Step 1 - Input Capture:** The user issues an `add-activity ...` which is captured and passed to the Parser by the ","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":"running AthletiCLI instance.","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"AlWo223"},"content":"**Step 2 - Activity Parsing:** The Parser parses the raw input to obtain the arguments of the activity. Given that all ","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"AlWo223"},"content":"parameters are provided correctly and no exception is thrown, a new activity object is created.","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"AlWo223"},"content":"**Step 3 - Command Parsing:** In addition the parser will create an `AddActivityCommand` object with the newly added ","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":"activity attached to it. The command implements the `AddActivityCommand#execute()` operation and is passed to ","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":"the AthletiCLI instance.","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":"**Step 4 - Activity Addition:** The AthletiCLI instance executes the `AddActivityCommand` object. The command will ","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":"access the data and retrieve the currently stored list of activities stored inside it. The new `Activity` object is ","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"AlWo223"},"content":"added to the list.","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":"**Step 5 - User Interaction:** Once the activity is successfully added, a confirmation message is displayed to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":"The following sequence diagram shows how the `add-activity` operation works:","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":"\u003cp align\u003d\"center\" width\u003d\"100%\"\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":" \u003cimg width\u003d\"80%\" src\u003d\"DeveloperGuide/AddActivity.png\" alt\u003d\"Sequence Diagram of add-activity`\"/\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":"\u003c/p\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"skylee03"},"content":"### [Proposed] Implementation of DietGoalList","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":138,"author":{"gitId":"yicheng-toh"},"content":"The current implementation of DietGoalList is an ArrayList.","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"yicheng-toh"},"content":"It helps to store dietGoals, however it is not efficient in searching for a particular dietGoal.","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"yicheng-toh"},"content":"At any instance of time, there could only be the existence of one dietGoal.","lastModifiedDate":"2023-10-24"},{"lineNumber":141,"author":{"gitId":"yicheng-toh"},"content":"Verifying if there is an existence of a dietGoal using an ArrayList takes O(n) time, where n is the number of dietGoals.","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"yicheng-toh"},"content":"The proposed change will be to change the underlying data structure to a hashmap for amortised O(1) time complexity","lastModifiedDate":"2023-10-24"},{"lineNumber":143,"author":{"gitId":"yicheng-toh"},"content":"for checking the presence of a dietGoal. ","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":145,"author":{"gitId":"DaDevChia"},"content":"### Sleep Management in AthletiCLI","lastModifiedDate":"2023-10-27"},{"lineNumber":146,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":147,"author":{"gitId":"DaDevChia"},"content":"#### [Implemented] Adding, Editing, Deleting, Listing Sleep","lastModifiedDate":"2023-10-27"},{"lineNumber":148,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":149,"author":{"gitId":"DaDevChia"},"content":"1. **Input Processing**: The user\u0027s input is passed through AthletiCLI to the Parser Class. Examples of user inputs include:","lastModifiedDate":"2023-10-27"},{"lineNumber":150,"author":{"gitId":"DaDevChia"},"content":" - \"add-sleep hours/8 datetime/2021-09-01 06:00\" for adding sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"DaDevChia"},"content":" - \"edit-sleep 1 hours/8 datetime/2021-09-01 06:00\" for editing sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"DaDevChia"},"content":" - \"delete-sleep 1\" for deleting sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"DaDevChia"},"content":" - \"list-sleep\" for listing all sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":154,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":155,"author":{"gitId":"DaDevChia"},"content":"2. **Command Identification**: The Parser Class identifies the type of sleep operation and passes the necessary parameters.","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"DaDevChia"},"content":"3. **Command Creation**: An instance of the corresponding command class is created (e.g., AddSleepCommand, EditSleepCommand, etc.) and returned to AthletiCLI.","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":159,"author":{"gitId":"DaDevChia"},"content":"4. **Command Execution**: AthletiCLI executes the command, interacting with the data instance of SleepList to perform the required operation.","lastModifiedDate":"2023-10-27"},{"lineNumber":160,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":161,"author":{"gitId":"DaDevChia"},"content":"5. **Result Display**: A message is returned post-execution and passed through AthletiCLI to the UI for display to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":165,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":166,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":168,"author":{"gitId":"DaDevChia"},"content":"AthletiCLI is designed for athletic individuals who are committed to optimizing their performance. ","lastModifiedDate":"2023-10-27"},{"lineNumber":169,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":170,"author":{"gitId":"DaDevChia"},"content":"These users are highly disciplined and engaged not only in regular, intense physical training but also in nutrition, mental conditioning, and recovery. ","lastModifiedDate":"2023-10-27"},{"lineNumber":171,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":172,"author":{"gitId":"DaDevChia"},"content":"They are looking for a holistic tool that integrates all facets of an athletic lifestyle. AthletiCLI serves as a daily or weekly companion, designed to monitor, track, and analyze various elements crucial for high-level athletic performance. ","lastModifiedDate":"2023-10-27"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":174,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":176,"author":{"gitId":"DaDevChia"},"content":"AthletiCLI provides a streamlined, integrated solution for athletic individuals focused on achieving peak performance. ","lastModifiedDate":"2023-10-27"},{"lineNumber":177,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":178,"author":{"gitId":"DaDevChia"},"content":"While the app includes robust capabilities for tracking physical training metrics, it also offers features for monitoring dietary habits and sleep metrics. ","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"DaDevChia"},"content":"By providing a comprehensive view of various performance-related factors over time, AthletiCLI enables athletes to identify trends, refine their training and lifestyle habits, and optimize outcomes. The app is more than a tracking tool—it\u0027s a performance optimization platform that takes into account the full spectrum of an athlete\u0027s life. ","lastModifiedDate":"2023-10-27"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":182,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":184,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":185,"author":{"gitId":"nihalzp"},"content":"|---------|-----------------------------------|-----------------------------------|----------------------------------------------------------------------------------------|","lastModifiedDate":"2023-10-26"},{"lineNumber":186,"author":{"gitId":"nihalzp"},"content":"| v1.0 | health-conscious user | add my dietary information | keep track of my daily calorie and nutrient intake |","lastModifiedDate":"2023-10-26"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":"| v1.0 | organized user | delete a dietary entry | remove outdated or incorrect data from my diet records |","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":"| v1.0 | fitness enthusiast | view all my diet records | have a clear overview of my dietary habits and make informed decisions on my diet |","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"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":190,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | motivated weight-conscious user | set diet goals | have the motivation to work towards keeping weight in check. |","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | forgetful user | see all my diet goals | remind myself of all the diet goals I have set. |","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | regretful user | remove my diet goals | I can rescind the strict goals I set previously when I find the goals too far fetched. |","lastModifiedDate":"2023-10-24"},{"lineNumber":193,"author":{"gitId":"yicheng-toh"},"content":"| v1.0 | motivated user | update my diet goals | I can work towards better version of myself by setting stricter goals. |","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | add my sleep information | keep track of my sleep habits and identify areas for improvement |","lastModifiedDate":"2023-10-27"},{"lineNumber":195,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | delete a sleep entry | remove outdated or incorrect data from my sleep records |","lastModifiedDate":"2023-10-27"},{"lineNumber":196,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | view all my sleep records | have a clear overview of my sleep habits and make informed decisions on my sleep |","lastModifiedDate":"2023-10-27"},{"lineNumber":197,"author":{"gitId":"DaDevChia"},"content":"| v1.0 | sleep deprived user | edit my sleep entries | correct any mistakes or update my sleep information as needed |","lastModifiedDate":"2023-10-27"},{"lineNumber":198,"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":199,"author":{"gitId":"nihalzp"},"content":"| v2.0 | meticulous user | edit my dietary entries | correct any mistakes or update my diet information as needed |","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":201,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":202,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":204,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":"1. AthletiCLI should work on Windows, MacOS and Linux that has java 11 installed.","lastModifiedDate":"2023-10-24"},{"lineNumber":207,"author":{"gitId":"DaDevChia"},"content":"2. AthletiCLI should be able to store data locally.","lastModifiedDate":"2023-10-27"},{"lineNumber":208,"author":{"gitId":"DaDevChia"},"content":"3. AthletiCLI should be able to work offline.","lastModifiedDate":"2023-10-27"},{"lineNumber":209,"author":{"gitId":"DaDevChia"},"content":"4. AthletiCLI should be easy to use.","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":211,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":213,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":217,"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":{"skylee03":37,"DaDevChia":37,"AlWo223":39,"yicheng-toh":41,"-":35,"nihalzp":28}},{"path":"docs/DeveloperGuide/AddActivity.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"\u0027https://plantuml.com/sequence-diagram","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"skinparam Style strictuml","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"skinparam SequenceMessageAlignment center","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T1 #7777DB","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T2 #5252CE","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"!define LOGIC_COLOR_T4 #101086","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"participant \":AthletiCLI\" as AthletiCLI LOGIC_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"participant \":Parser\" as Parser #lightblue","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"participant \"a:Activity\" as Activity #yellow","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"participant \"c:AddActivityCommand\" as AddActivityCommand #lightgreen","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"participant \"data:Data\" as Data #lightgrey","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"participant \"activities:ActivityList\" as activities #lightgrey","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"AthletiCLI++","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"AthletiCLI -\u003e Parser++: parseCommand(userInput)","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"Parser -\u003e Parser++: parseActivity(arguments)","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"Parser -\u003e Activity++: Activity()","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"Activity --\u003e Parser--: a","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"Parser--","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"Parser -\u003e AddActivityCommand++: parseAddActivityCommand(arguments)","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand --\u003e Parser--: c","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"Parser --\u003e AthletiCLI--: c","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"AthletiCLI -\u003e AddActivityCommand++: execute(a, data)","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand -\u003e Data++: getActivities()","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"Data --\u003e activities++","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"activities --\u003e Data--: activities","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"Data --\u003e AddActivityCommand--: activities","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand -\u003e activities++: add(a)","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"activities --\u003e AddActivityCommand--","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"AddActivityCommand -\u003e AthletiCLI--: message","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"AlWo223":38}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"permalink: /","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"title: About AthletiCLI","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"feature_text: |","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" # AthletiCLI","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" Your all-in-one solution to track, analyse, and optimize your athletic performance.","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"feature_image: \"https://picsum.photos/1300/400?image\u003d989\"","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"[![](https://github.com/AY2324S1-CS2113-T17-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S1-CS2113-T17-1/tp/actions)","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"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":14,"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":15,"author":{"gitId":"nihalzp"},"content":"covers dietary habits, sleep metrics, and more.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"## Quick Start","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"* Ensure you have the required runtime environment installed on your computer.","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"* Download the latest AthletiCLI from the official repository.","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"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":22,"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":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"## Features","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"**Notes about Command Format**","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"* Words in UPPER_CASE are parameters provided by the user.","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"* Parameters can be in any order.","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"* Parameters enclosed in square brackets [] are optional.","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"## Activity Management","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"### Adding Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"`add-activity`, `add-run`, `add-swim`, `add-cycle`","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"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":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"* `add-activity CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"* `add-run CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"* `add-swim CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"* `add-cycle CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"* CAPTION: A short description of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"* DURATION: The duration of the activity in minutes.","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"* DISTANCE: The distance of the activity in meters. It must be a positive number.","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"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":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":"* `add-activity Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":"* `add-cycle Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":"### Deleting Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":"`delete-activity`","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"Accidentally added an activity? You can quickly delete activities by using the following command.","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"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":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"* `delete-activity INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity as shown in the displayed activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 2` deletes the second activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 1` deletes the first activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"### Listing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":"`list-activity`","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"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":84,"author":{"gitId":"AlWo223"},"content":"the detailed flag.","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"* `list-activity [-d]`","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":"**Flags:**","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"* `-d`: Shows a detailed list of activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":"* `list-activity` shows a brief overview of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":"* `list-activity -d` shows a detailed summary of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":"### Editing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"`edit-activity`, `edit-run`, `edit-swim`, `edit-cycle`","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":"You can edit your activities in AthletiCLI by editing the activity at the specified index.","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"* `edit-activity INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":"* `edit-run INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"* `edit-swim INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"* `edit-cycle INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity to be edited - must be a positive number","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":"* see adding activities for the other parameters","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"AlWo223"},"content":"* `edit-activity 1 Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"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":121,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":"### Setting Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":"\u0027set-activity-goal\u0027","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":"You can set goals for your activities in AthletiCLI by setting the target distance or duration for a specific sport.","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"AlWo223"},"content":"**Syntax**","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":"* `set-activity-goal sport/SPORT target/TARGET period/PERIOD value/VALUE`","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":"**Parameters**","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":"* SPORT: The sport for which you want to set a goal. It must be one of the following: run, swim, cycle, general.","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":"* TARGET: The target for which you want to set a goal. It must be one of the following: distance, duration.","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":"* VALUE: The value of the target. It must be a positive number. For distance, it is in meters. For duration, it is ","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"AlWo223"},"content":" in minutes.","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"AlWo223"},"content":"**Examples**","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"AlWo223"},"content":"* `set-activity-goal sport/running type/distance period/weekly target/10000` sets a goal of running 10km per week.","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"AlWo223"},"content":"* `set-activity-goal sport/swimming type/duration period/monthly target/120` sets a goal of swimming for 2 hours per ","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"AlWo223"},"content":" month.","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":"## Diet Management","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":"### Adding Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":"`add-diet`","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"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":150,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/CALORIES protein/PROTEIN carb/CARB fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal.","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"nihalzp"},"content":"### Deleting Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"nihalzp"},"content":"`delete-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"nihalzp"},"content":"You can delete your diet in AtheltiCLI by deleting the diet at the specified index.","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"nihalzp"},"content":"* `delete-diet INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be deleted - must be a positive integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"nihalzp"},"content":"* `delete-diet 1`","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"nihalzp"},"content":"### Listing Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"nihalzp"},"content":"`list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"nihalzp"},"content":"You can list all your diets in AtheltiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"yicheng-toh"},"content":"## Diet Goal Management","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":"### Adding Diet Goals:","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":"`set-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"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":204,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":"Currently only the following nutrients/metrics are tracked:","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"yicheng-toh"},"content":"1. Calories","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"yicheng-toh"},"content":"2. Protein","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"yicheng-toh"},"content":"3. Carbs","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"yicheng-toh"},"content":"4. Fats","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"yicheng-toh"},"content":"You can set multiple nutrients goals at once with the `set-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","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":"**Parameters:**","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":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"yicheng-toh"},"content":"* CARB: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","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":"You can create one or multiple nutrient goals at once with this command.","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":"","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"yicheng-toh"},"content":"Create multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"yicheng-toh"},"content":"Create a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500`","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"yicheng-toh"},"content":"### Deleting Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"yicheng-toh"},"content":"`delete-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"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":251,"author":{"gitId":"yicheng-toh"},"content":"This index will be referenced via `list-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"yicheng-toh"},"content":"* `delete-diet-goal INDEX`","lastModifiedDate":"2023-10-18"},{"lineNumber":258,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":259,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":260,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":261,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":262,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"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":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":"**Examples:**","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":"* `delete-diet-goal 1`","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":"### Listing Diet Goals:","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":"`list-diet-goals`","lastModifiedDate":"2023-10-18"},{"lineNumber":276,"author":{"gitId":"yicheng-toh"},"content":"You can list all your diet goals in AtheltiCLI.","lastModifiedDate":"2023-10-18"},{"lineNumber":277,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":278,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":279,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":280,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":281,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":282,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":283,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":284,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":285,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":286,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":287,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":288,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":289,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":290,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":291,"author":{"gitId":"yicheng-toh"},"content":"### Editing Diet Goals:","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-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":295,"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":296,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":297,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":298,"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":299,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":300,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":301,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":302,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":303,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":304,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":305,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":306,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":307,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":308,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":309,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":310,"author":{"gitId":"yicheng-toh"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":311,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":312,"author":{"gitId":"yicheng-toh"},"content":"* CARBS: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":313,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":314,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":315,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":316,"author":{"gitId":"yicheng-toh"},"content":"You can create one or multiple nutrient goals with this command.","lastModifiedDate":"2023-10-18"},{"lineNumber":317,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":318,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":319,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":320,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":321,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":322,"author":{"gitId":"yicheng-toh"},"content":"Edit multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":323,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000 protein/200 carb/500 fat/100`","lastModifiedDate":"2023-10-18"},{"lineNumber":324,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":325,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":326,"author":{"gitId":"yicheng-toh"},"content":"Edit a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":327,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000`","lastModifiedDate":"2023-10-18"},{"lineNumber":328,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":329,"author":{"gitId":"DaDevChia"},"content":"## Sleep Management","lastModifiedDate":"2023-10-17"},{"lineNumber":330,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":331,"author":{"gitId":"DaDevChia"},"content":"### Adding Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":332,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":333,"author":{"gitId":"DaDevChia"},"content":"**Command:** `add-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":334,"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":335,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":336,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":337,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":338,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":339,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":340,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":341,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":342,"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":343,"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":344,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":345,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":346,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":347,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/01-09-2021 22:00 end/02-09-2021 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":348,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":349,"author":{"gitId":"DaDevChia"},"content":"### Listing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":350,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":351,"author":{"gitId":"DaDevChia"},"content":"**Command:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":352,"author":{"gitId":"DaDevChia"},"content":"You can list all your sleep records in AtheltiCLI.","lastModifiedDate":"2023-10-17"},{"lineNumber":353,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":354,"author":{"gitId":"DaDevChia"},"content":"**Syntax:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":355,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":356,"author":{"gitId":"DaDevChia"},"content":"**Examples:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":357,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":358,"author":{"gitId":"DaDevChia"},"content":"### Deleting Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":359,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":360,"author":{"gitId":"DaDevChia"},"content":"**Command:** `delete-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":361,"author":{"gitId":"DaDevChia"},"content":"You can delete your sleep in AtheltiCLI by specifying the sleep\u0027s index.","lastModifiedDate":"2023-10-17"},{"lineNumber":362,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":363,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":364,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":365,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep INDEX`","lastModifiedDate":"2023-10-17"},{"lineNumber":366,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":367,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":368,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":369,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to delete.","lastModifiedDate":"2023-10-17"},{"lineNumber":370,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":371,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":372,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":373,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep 5` ","lastModifiedDate":"2023-10-17"},{"lineNumber":374,"author":{"gitId":"DaDevChia"},"content":" (Note: This will delete the 5th sleep record from your records.)","lastModifiedDate":"2023-10-17"},{"lineNumber":375,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":376,"author":{"gitId":"DaDevChia"},"content":"### Editing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":377,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":378,"author":{"gitId":"DaDevChia"},"content":"**Command:** `edit-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":379,"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":380,"author":{"gitId":"nihalzp"},"content":"end times.","lastModifiedDate":"2023-10-18"},{"lineNumber":381,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":382,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":383,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":384,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep INDEX start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":385,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":386,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":387,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":388,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to edit.","lastModifiedDate":"2023-10-17"},{"lineNumber":389,"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":390,"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":391,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":392,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":393,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":394,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep 5 start/05-09-2021 23:00 end/06-09-2021 07:00` ","lastModifiedDate":"2023-10-17"},{"lineNumber":395,"author":{"gitId":"DaDevChia"},"content":" (Note: This will edit the 5th sleep record to have the new specified timings.)","lastModifiedDate":"2023-10-17"},{"lineNumber":396,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":397,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":398,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":399,"author":{"gitId":"DaDevChia"},"content":"Remember, when using AtheltiCLI:","lastModifiedDate":"2023-10-17"},{"lineNumber":400,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":401,"author":{"gitId":"DaDevChia"},"content":"* Make sure to provide accurate dates and times.","lastModifiedDate":"2023-10-17"},{"lineNumber":402,"author":{"gitId":"DaDevChia"},"content":"* Double-check indexes before deleting or editing records to prevent mistakes.","lastModifiedDate":"2023-10-17"},{"lineNumber":403,"author":{"gitId":"DaDevChia"},"content":"* If you encounter any error messages, read them carefully to understand what went wrong.","lastModifiedDate":"2023-10-17"},{"lineNumber":404,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":405,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":407,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":408,"author":{"gitId":"AlWo223"},"content":"[User Guide](UserGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":409,"author":{"gitId":"AlWo223"},"content":"[Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":410,"author":{"gitId":"AlWo223"},"content":"[About Us](AboutUs.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":411,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":412,"author":{"gitId":"skylee03"},"content":"* If you are interested in using AthletiCLI, head over to the [User Guide](UserGuide.html).","lastModifiedDate":"2023-10-26"},{"lineNumber":413,"author":{"gitId":"skylee03"},"content":"* If you are interested about developing AthletiCLI, the [Developer Guide](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2023-10-26"},{"lineNumber":414,"author":{"gitId":"skylee03"},"content":"* If you would like to learn more about our development team, please visit the [About Us](AboutUs.html) page.","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"skylee03":13,"DaDevChia":75,"AlWo223":117,"yicheng-toh":133,"-":4,"nihalzp":72}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: User Guide","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"## Diet Management","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"### Adding Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"`add-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"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-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal.","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"* DATETIME: The date and time of the meal. It must follow the ISO Date Time Format: YYYY-MM-DD HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":"### Editing Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"`edit-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"You can edit your diet in AtheltiCLI by editing the diet at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":"* `edit-diet INDEX calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be edited - must be a positive integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal. [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"* DATETIME: The date and time of the meal. It must follow the ISO Date Time Format: YYYY-MM-DD HH:MM [OPTIONAL]","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 calories/500 protein/20 carb/50 fat/10 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 datetime/2021-09-01 06:00 protein/20 carb/50 calories/500 fat/10`","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 calories/500`","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":"* `edit-diet 1 protein/20`","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"### Deleting Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":"`delete-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":"You can delete your diet in AtheltiCLI by deleting the diet at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":"* `delete-diet INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be deleted - must be a positive integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":"* `delete-diet 1`","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":"### Listing Diets:","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":"`list-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"You can list all your diets in AtheltiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"skylee03":4,"-":19,"nihalzp":60}},{"path":"docs/UserGuideTmp.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"layout: page","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"title: User Guide","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"## Quick Start","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"* Ensure you have the required runtime environment installed on your computer.","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"* Download the latest AthletiCLI from the official repository.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"* Copy the downloaded file to a folder you want to designate as the home for AthletiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"* Open a command terminal, cd into the folder where you copied the file, and run java -jar AthletiCLI.jar","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"## Features","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"**Notes about Command Format**","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"* Words in UPPER_CASE are parameters provided by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":"* Parameters can be in any order.","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"* Parameters enclosed in square brackets [] are optional.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":"## Activity Management","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"### Adding Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":"`add-activity`, `add-run`, `add-swim`, `add-cycle`","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"You can record your activities in AtheltiCLI by adding different activities including running, cycling, and swimming.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":"* `add-activity CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"* `add-run CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"* `add-swim CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"* `add-cycle CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"* CAPTION: A short description of the activity.","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"* DURATION: The duration of the activity in minutes.","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":"* DISTANCE: The distance of the activity in meters. It must be a positive number.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":"* `add-activity Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"* `add-cycle Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"### Deleting Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":"`delete-activity`","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":"Accidentally added an activity? You can quickly delete activities by using the following command.","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":"The index must be a positive number and is not larger than the number of activities recorded.","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":"* `delete-activity INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":"* INDEX: The index of the activity as shown in the displayed activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":"* `delete-activity 2` deletes the second activity in the activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":"* `delete-activity 1` deletes the first activity in the activity list.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":"### Listing Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"`list-activity`","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":"the detailed flag.","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":"* `list-activity [-d]`","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":"**Flags:**","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":"* `-d`: Shows a detailed list of activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":"* `list-activity` shows a brief overview of all activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":"* `list-activity -d` shows a detailed summary of all activities.","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":"### Editing Activities:","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":"`edit-activity`, `edit-run`, `edit-swim`, `edit-cycle`","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":"You can edit your activities in AthletiCLI by editing the activity at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"skylee03"},"content":"* `edit-activity INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"skylee03"},"content":"* `edit-run INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"skylee03"},"content":"* `edit-swim INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"skylee03"},"content":"* `edit-cycle INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-26"},{"lineNumber":100,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"skylee03"},"content":"* INDEX: The index of the activity to be edited - must be a positive number","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"skylee03"},"content":"* see adding activities for the other parameters","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"skylee03"},"content":"* `edit-activity 1 Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"skylee03"},"content":"* `edit-cycle 2 Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"skylee03"},"content":"## Diet Goal Management","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"skylee03"},"content":"### Adding Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"skylee03"},"content":"`set-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":120,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"skylee03"},"content":"Currently only the following nutrients/metrics are tracked:","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"skylee03"},"content":"1. Calories","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"skylee03"},"content":"2. Protein","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"skylee03"},"content":"3. Carbs","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"skylee03"},"content":"4. Fats","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"skylee03"},"content":"You can set multiple nutrients goals at once with the `set-diet-goal` command.","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"skylee03"},"content":"* `set-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"skylee03"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"skylee03"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"skylee03"},"content":"* CARB: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"skylee03"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"skylee03"},"content":"You can create one or multiple nutrient goals at once with this command.","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":153,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":154,"author":{"gitId":"skylee03"},"content":"Create multiple nutrients goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":155,"author":{"gitId":"skylee03"},"content":"* `set-diet-goal calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-26"},{"lineNumber":156,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":157,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":158,"author":{"gitId":"skylee03"},"content":"Create a single calories goal:","lastModifiedDate":"2023-10-26"},{"lineNumber":159,"author":{"gitId":"skylee03"},"content":"* `set-diet-goal calories/500`","lastModifiedDate":"2023-10-26"},{"lineNumber":160,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":161,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":162,"author":{"gitId":"skylee03"},"content":"### Deleting Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":163,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":164,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":165,"author":{"gitId":"skylee03"},"content":"`delete-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":166,"author":{"gitId":"skylee03"},"content":"You can delete your diet goals in AtheltiCLI by deleting the goal at the specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":167,"author":{"gitId":"skylee03"},"content":"This index will be referenced via `list-diet-goal` command.","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":169,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":170,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"skylee03"},"content":"* `delete-diet-goal INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":176,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":179,"author":{"gitId":"skylee03"},"content":"* INDEX: The index of the diet goal to be deleted. It must be a positive integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":180,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":182,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":183,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":185,"author":{"gitId":"skylee03"},"content":"* `delete-diet-goal 1`","lastModifiedDate":"2023-10-26"},{"lineNumber":186,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":187,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"skylee03"},"content":"### Listing Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":190,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"skylee03"},"content":"`list-diet-goals`","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"skylee03"},"content":"You can list all your diet goals in AtheltiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":193,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":194,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":195,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"skylee03"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":204,"author":{"gitId":"skylee03"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":205,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":207,"author":{"gitId":"skylee03"},"content":"### Editing Diet Goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":208,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":209,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":210,"author":{"gitId":"skylee03"},"content":"`edit-diet-goal`","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"skylee03"},"content":"You can edit the target value of your diet goals in AtheltiCLI, redefining the target value for the specified nutrient.","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":215,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"skylee03"},"content":"* `edit-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"skylee03"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"skylee03"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"skylee03"},"content":"* CARBS: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"skylee03"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"skylee03"},"content":"You can create one or multiple nutrient goals with this command.","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":235,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":236,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":237,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":238,"author":{"gitId":"skylee03"},"content":"Edit multiple nutrients goals:","lastModifiedDate":"2023-10-26"},{"lineNumber":239,"author":{"gitId":"skylee03"},"content":"* `edit-diet-goal calories/5000 protein/200 carb/500 fat/100`","lastModifiedDate":"2023-10-26"},{"lineNumber":240,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":241,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":242,"author":{"gitId":"skylee03"},"content":"Edit a single calories goal:","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"skylee03"},"content":"* `edit-diet-goal calories/5000`","lastModifiedDate":"2023-10-26"},{"lineNumber":244,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"skylee03"},"content":"## Sleep Management","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"skylee03"},"content":"### Adding Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"skylee03"},"content":"**Command:** `add-sleep` ","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"skylee03"},"content":"You can record your sleep timings in AtheltiCLI by adding your sleep start and end time.","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"skylee03"},"content":"* `add-sleep start/START end/END`","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":256,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"skylee03"},"content":"* START: The start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"skylee03"},"content":"* END: The end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":263,"author":{"gitId":"skylee03"},"content":"* `add-sleep start/01-09-2021 22:00 end/02-09-2021 06:00`","lastModifiedDate":"2023-10-26"},{"lineNumber":264,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"skylee03"},"content":"### Listing Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"skylee03"},"content":"**Command:** `list-sleep`","lastModifiedDate":"2023-10-26"},{"lineNumber":268,"author":{"gitId":"skylee03"},"content":"You can list all your sleep records in AtheltiCLI.","lastModifiedDate":"2023-10-26"},{"lineNumber":269,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"skylee03"},"content":"**Syntax:** `list-sleep`","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"skylee03"},"content":"**Examples:** `list-sleep`","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"skylee03"},"content":"### Deleting Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":275,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":276,"author":{"gitId":"skylee03"},"content":"**Command:** `delete-sleep` ","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"skylee03"},"content":"You can delete your sleep in AtheltiCLI by specifying the sleep\u0027s index.","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":281,"author":{"gitId":"skylee03"},"content":"* `delete-sleep INDEX`","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"skylee03"},"content":"* INDEX: The integer index of the sleep record you wish to delete.","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"skylee03"},"content":"* `delete-sleep 5` ","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"skylee03"},"content":" (Note: This will delete the 5th sleep record from your records.)","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"skylee03"},"content":"### Editing Sleep:","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"skylee03"},"content":"**Command:** `edit-sleep` ","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"skylee03"},"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-26"},{"lineNumber":296,"author":{"gitId":"skylee03"},"content":"end times.","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":298,"author":{"gitId":"skylee03"},"content":"**Syntax:**","lastModifiedDate":"2023-10-26"},{"lineNumber":299,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"skylee03"},"content":"* `edit-sleep INDEX start/START end/END`","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"skylee03"},"content":"**Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"skylee03"},"content":"* INDEX: The integer index of the sleep record you wish to edit.","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"skylee03"},"content":"* START: The new start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"skylee03"},"content":"* END: The new end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":308,"author":{"gitId":"skylee03"},"content":"**Examples:**","lastModifiedDate":"2023-10-26"},{"lineNumber":309,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":310,"author":{"gitId":"skylee03"},"content":"* `edit-sleep 5 start/05-09-2021 23:00 end/06-09-2021 07:00` ","lastModifiedDate":"2023-10-26"},{"lineNumber":311,"author":{"gitId":"skylee03"},"content":" (Note: This will edit the 5th sleep record to have the new specified timings.)","lastModifiedDate":"2023-10-26"},{"lineNumber":312,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":313,"author":{"gitId":"skylee03"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":314,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":315,"author":{"gitId":"skylee03"},"content":"Remember, when using AtheltiCLI:","lastModifiedDate":"2023-10-26"},{"lineNumber":316,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":317,"author":{"gitId":"skylee03"},"content":"* Make sure to provide accurate dates and times.","lastModifiedDate":"2023-10-26"},{"lineNumber":318,"author":{"gitId":"skylee03"},"content":"* Double-check indexes before deleting or editing records to prevent mistakes.","lastModifiedDate":"2023-10-26"},{"lineNumber":319,"author":{"gitId":"skylee03"},"content":"* If you encounter any error messages, read them carefully to understand what went wrong.","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"skylee03":319}},{"path":"docs/puml/DietGoals.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"\u0027https://plantuml.com/sequence-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"skinparam Style strictuml","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"skinparam SequenceMessageAlignment center","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"participant \":AthletiCLI\" as AthletiCLI #lightblue","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"participant \":Parser\" as Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"participant \":dietGoal\" as dietGoal","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"participant \":SetDietGoalCommand\" as SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"participant \"temp:dietGoalList\" as tempDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"participant \"data:dietGoalList\" as dataDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"\u0027autonumber","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI++","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI -\u003e Parser++ : ParseCommand(\"set-diet-goal fats/1\")","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"Parser -\u003e Parser++ : ParseDietGoalSetEdit(\"fats/1\")","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"create tempDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"Parser -\u003e tempDietGoalList++ : dietGoalList()","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"tempDietGoalList --\u003e Parser-- : dietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" loop number of valid new diet goals","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" create dietGoal","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" Parser -\u003e dietGoal++ : dietGoal()","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" dietGoal --\u003e Parser-- : dietGoal","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" end","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":"Parser --\u003e Parser-- : dietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":"create SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"Parser -\u003e SetDietGoalCommand++ : SetDietGoalCommand()","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":"SetDietGoalCommand --\u003e Parser-- : SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"Parser --\u003e AthletiCLI-- : SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"AthletiCLI -\u003e SetDietGoalCommand++ : execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"SetDietGoalCommand -\u003e dataDietGoalList++ : add()","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":"dataDietGoalList --\u003e SetDietGoalCommand--","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":"destroy tempDietGoalList","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":"SetDietGoalCommand --\u003e AthletiCLI-- : messages","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":"destroy SetDietGoalCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"yicheng-toh":39}},{"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.ui.Parser;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * Defines the basic structure and the behavior of AthletiCLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"public class AthletiCLI {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" private static Logger logger \u003d Logger.getLogger(AthletiCLI.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" private static Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" private static Data data \u003d Data.getInstance();","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * Constructs an \u003ccode\u003eAthletiCLI\u003c/code\u003e object.","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" private AthletiCLI() {","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" logger.addHandler(new FileHandler(\"%t/athleticli-log.txt\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" logger.addHandler(new ConsoleHandler());","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","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":" * Creates an `AthletiCLI` object and runs it.","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" * @param args Arguments obtained from the command line.","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" /* save data when the JVM begins its shutdown sequence */","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" Runtime.getRuntime().addShutdownHook(new Thread(() -\u003e {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" final String[] feedback \u003d new SaveCommand().execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" ui.showMessages(feedback);","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" }));","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" new AthletiCLI().run();","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" * Displays the welcome interface, continuously reads user input","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" * and executes corresponding instructions until exiting.","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" private void run() {","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" logger.entering(getClass().getName(), \"run\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" data.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" ui.showWelcome();","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" final String rawUserInput \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" logger.info(\"Command read: \" + rawUserInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" final Command command \u003d Parser.parseCommand(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" final String[] feedback \u003d command.execute(data);","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" ui.showMessages(feedback);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" logger.info(\"Command executed successfully\");","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" logger.warning(\"Exception caught: \" + e);","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" logger.exiting(getClass().getName(), \"run\");","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":79}},{"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/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.activity.FindActivityCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.diet.FindDietCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.sleep.FindSleepCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" protected LocalDate date;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" public FindCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * Returns the records to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" * @return The records to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" var activities \u003d Stream.of(new FindActivityCommand(date).execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" var diets \u003d Stream.of(new FindDietCommand(date).execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" var sleeps \u003d Stream.of(new FindSleepCommand(date).execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" return Stream.of(activities, diets, sleeps)","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" .reduce(Stream::concat)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .orElseGet(Stream::empty)","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":36}},{"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":" Message.HELP_FIND_ACTIVITY,","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" \"\\nDiet Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" Message.HELP_FIND_DIET,","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" \"\\nSleep Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" Message.HELP_FIND_SLEEP,","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" \"\\nMisc:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" Message.HELP_FIND,","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" Message.HELP_SAVE,","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" Message.HELP_BYE,","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" Message.HELP_HELP,","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" \"\\n\" + Message.HELP_DETAILS","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" };","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" private static final Map\u003cString, String\u003e HELP_MESSAGES \u003d Map.ofEntries(","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY, Message.HELP_ADD_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN, Message.HELP_ADD_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM, Message.HELP_ADD_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE, Message.HELP_ADD_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_DELETE, Message.HELP_DELETE_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_LIST, Message.HELP_LIST_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_EDIT, Message.HELP_EDIT_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN_EDIT, Message.HELP_EDIT_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM_EDIT, Message.HELP_EDIT_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE_EDIT, Message.HELP_EDIT_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_FIND, Message.HELP_FIND_ACTIVITY),","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_ADD, Message.HELP_ADD_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" entry(CommandName.COMMAND_DIET_EDIT, Message.HELP_EDIT_DIET),","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_DELETE, Message.HELP_DELETE_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_LIST, Message.HELP_LIST_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_FIND, Message.HELP_FIND_DIET),","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_ADD, Message.HELP_ADD_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_LIST, Message.HELP_LIST_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_DELETE, Message.HELP_DELETE_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_EDIT, Message.HELP_EDIT_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_FIND, Message.HELP_FIND_SLEEP),","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_FIND, Message.HELP_FIND),","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SAVE, Message.HELP_SAVE),","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_BYE, Message.HELP_BYE),","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_HELP, Message.HELP_HELP)","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" private String command;","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" public HelpCommand(String command) {","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" this.command \u003d command;","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" * Returns the help messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"skylee03"},"content":" if (HELP_MESSAGES.containsKey(command)) {","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"skylee03"},"content":" return new String[] {\"Usage: \" + HELP_MESSAGES.get(command)};","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"skylee03"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"skylee03"},"content":" return HELP_ALL;","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"skylee03":99,"nihalzp":1}},{"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.ui.Message;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class SaveCommand extends Command {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * Saves the data into the file.","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" assert data !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" data.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_IO_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" return new String[] {Message.MESSAGE_SAVE};","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":27}},{"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":" activities.sort();","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" int size \u003d activities.size();","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String countMessage;","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" if (size \u003e 1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d String.format(Message.MESSAGE_ACTIVITY_COUNT, size);","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d Message.MESSAGE_ACTIVITY_FIRST;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_ADDED, this.activity.toString(), countMessage};","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":40}},{"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/FindActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class FindActivityCommand extends FindCommand {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" public FindActivityCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" super(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Returns the activities matching the date to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" var resultStream \u003d data.getActivities()","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" .find(date)","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" .stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" .filter(Activity.class::isInstance)","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" .map(Activity.class::cast)","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" .map(Activity::toString);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" return Stream.concat(Stream.of(Message.MESSAGE_ACTIVITY_FIND), resultStream)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":35}},{"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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" * Prints the list of activities.","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" * @param activities The current activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" * @param size The size of the activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" * @return The message containing listing of activities which will be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" public String[] printList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d (i+1) + \".\" + activities.get(i).toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * Prints the detailed list of activities.","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * @param activities The current activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * @param size The size of the activity list.","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" * @return The message containing listing of activities which will be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public String[] printDetailedList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d activities.get(i).toDetailedString();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":64}},{"path":"src/main/java/athleticli/commands/activity/SetActivityGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoalList;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"public class SetActivityGoalCommand extends Command {","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" private final ActivityGoal activityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" * Constructor for SetActivityGoalCommand.","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" * @param activityGoal Activity goal to be added.","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" public SetActivityGoalCommand(ActivityGoal activityGoal){","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" this.activityGoal \u003d activityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * Updates the activity goal list.","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param data The current data containing the activity goal list.","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" ActivityGoalList activityGoals \u003d data.getActivityGoals();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" activityGoals.add(this.activityGoal);","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_GOAL_ADDED, this.activityGoal.toString(data)};","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"AlWo223":31}},{"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":" assert index \u003e 0 : \"Index cannot be less than 1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" this.index \u003d index;","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":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" DietList dietList \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" int size \u003d dietList.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" if (index \u003e size) {","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_INVALID_DIET_INDEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" Diet oldDiet \u003d dietList.get(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" dietList.remove(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_DELETED, oldDiet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" String.format(Message.MESSAGE_DIET_COUNT, size - 1)};","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":43}},{"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 have the value of 1 minimally.\";","lastModifiedDate":"2023-10-23"},{"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 (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-23"},{"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/EditDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Parameter;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Parser;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" * Executes the edit diet command provided by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"public class EditDietCommand extends Command {","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private final int index;","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private final HashMap\u003cString, String\u003e dietMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" * Constructor for EditDietCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" * @param index Index of the diet to be edited.","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * @param dietMap Updated Diet.","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" public EditDietCommand(int index, HashMap\u003cString, String\u003e dietMap) {","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" assert index \u003e 0 : \"Index should be greater than 0\";","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assert !dietMap.isEmpty() : \"Diet map should not be empty\";","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" this.dietMap \u003d dietMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" * Executes the edit diet command.","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" * @param data Data object containing the current list of diets.","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" * @return String array containing the messages to be printed to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException If the index provided is out of bounds.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" DietList diets \u003d data.getDiets();","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" int size \u003d diets.size();","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" if (index \u003e size) {","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_INVALID_DIET_INDEX);","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" Diet oldDiet \u003d diets.get(index - 1);","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" for (String key : dietMap.keySet()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" assert !java.util.Objects.equals(dietMap.get(key), \"\") : \"Diet parameter should not be empty\";","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" switch (key) {","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" case Parameter.CALORIES_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" oldDiet.setCalories(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" case Parameter.PROTEIN_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" oldDiet.setProtein(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" case Parameter.CARB_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" oldDiet.setCarb(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" case Parameter.FAT_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" oldDiet.setFat(Integer.parseInt(dietMap.get(key)));","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" case Parameter.DATETIME_SEPARATOR:","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" LocalDateTime dateTime \u003d Parser.parseDateTime(dietMap.get(key));","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" oldDiet.setDateTime(dateTime);","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" default:","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" diets.set(index - 1, oldDiet);","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_UPDATED, oldDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"nihalzp":76}},{"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/FindDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" * Finds diets matching the date.","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"public class FindDietCommand extends FindCommand {","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" public FindDietCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" super(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * Returns the diets matching the date to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" var resultStream \u003d data.getDiets()","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" .find(date)","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" .stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .filter(Diet.class::isInstance)","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" .map(Diet.class::cast)","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" .map(Diet::toString);","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" return Stream.concat(Stream.of(Message.MESSAGE_DIET_FIND), resultStream)","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":35,"nihalzp":4}},{"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/FindSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class FindSleepCommand extends FindCommand {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" public FindSleepCommand(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" super(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Returns the sleeps matching the date to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" var resultStream \u003d data.getSleeps()","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" .find(date)","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" .stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" .filter(Sleep.class::isInstance)","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" .map(Sleep.class::cast)","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" .map(Sleep::toString);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" return Stream.concat(Stream.of(Message.MESSAGE_SLEEP_FIND), resultStream)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" .toArray(String[]::new);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":35}},{"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.IOException;","lastModifiedDate":"2023-10-27"},{"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 {","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" private static Data dataInstance;","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" private ActivityList activities \u003d new ActivityList();","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" private ActivityGoalList activityGoals \u003d new ActivityGoalList();","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" private DietList diets \u003d new DietList();","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" private DietGoalList dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" private SleepList sleeps \u003d new SleepList();","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" private SleepGoalList sleepGoals \u003d new SleepGoalList();","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * Returns the singleton instance of `Data`.","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" * @return The singleton instance of `Data`.","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public static Data getInstance() {","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" if (dataInstance \u003d\u003d null) {","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" dataInstance \u003d new Data();","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" return dataInstance;","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" * Loads data from files.","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" public void load() {","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" activities.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" activityGoals.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" diets.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" dietGoals.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" sleeps.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" sleepGoals.load();","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" * Saves data to files.","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" public void save() throws IOException {","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" activities.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" activityGoals.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" diets.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" dietGoals.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" sleeps.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" sleepGoals.save();","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"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":" * Get all the objects","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":" public ActivityList getActivities() {","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"DaDevChia"},"content":" return activities;","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"DaDevChia"},"content":" public ActivityGoalList getActivityGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"DaDevChia"},"content":" return activityGoals;","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":" public DietList getDiets() {","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"DaDevChia"},"content":" return diets;","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"DaDevChia"},"content":" public DietGoalList getDietGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"DaDevChia"},"content":" return dietGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" public SleepList getSleeps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":81,"author":{"gitId":"DaDevChia"},"content":" return sleeps;","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":" public SleepGoalList getSleepGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" return sleepGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" * Set all the objects","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"DaDevChia"},"content":" public void setActivities(ActivityList activities) {","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"DaDevChia"},"content":" this.activities \u003d activities;","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"DaDevChia"},"content":" public void setActivityGoals(ActivityGoalList activityGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"DaDevChia"},"content":" this.activityGoals \u003d activityGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"DaDevChia"},"content":" public void setDiets(DietList diets) {","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"DaDevChia"},"content":" this.diets \u003d diets;","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"DaDevChia"},"content":" public void setDietGoals(DietGoalList dietGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"DaDevChia"},"content":" this.dietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"DaDevChia"},"content":" public void setSleeps(SleepList sleeps) {","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"DaDevChia"},"content":" this.sleeps \u003d sleeps;","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"DaDevChia"},"content":" public void setSleepGoals(SleepGoalList sleepGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"DaDevChia"},"content":" this.sleepGoals \u003d sleepGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":116,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":58,"DaDevChia":57,"nihalzp":1}},{"path":"src/main/java/athleticli/data/Findable.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public interface Findable {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" * Returns a list of objects matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * @return A list of objects matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date);","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"skylee03":14}},{"path":"src/main/java/athleticli/data/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" * Defines the basic fields and methods for a goal.","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public abstract class Goal {","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" * Defines different types of timespans.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" public enum Timespan {","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" DAILY(1),","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" WEEKLY(7),","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" MONTHLY(30),","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" YEARLY(365);","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" private final int days;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" Timespan(int days) {","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" this.days \u003d days;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * Returns the number of days in the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" * @return The number of days in the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public int getDays() {","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" return days;","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" private Timespan timespan;","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" public Goal(Timespan timespan) {","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" this.timespan \u003d timespan;","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" * Returns the timespan of this goal.","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" * @return The timespan of this goal.","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" public Timespan getTimespan() {","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" return timespan;","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" * Checks whether the date is between the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" * @param timespan The timespan of the goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" * @return Whether the date is between the timespan.","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" public static boolean checkDate(LocalDate date, Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" final LocalDate endDate \u003d LocalDate.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" final LocalDate startDate \u003d endDate.minusDays(timespan.getDays() - 1);","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" return !(date.isBefore(startDate) || date.isAfter(endDate));","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" * Returns whether the goal is achieved.","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" * @param data The current data containing all records.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" * @return Whether the goal is achieved.","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" public abstract boolean isAchieved(Data data);","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"skylee03":67,"AlWo223":3}},{"path":"src/main/java/athleticli/data/StorableList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.storage.Storage;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public abstract class StorableList\u003cT\u003e extends ArrayList\u003cT\u003e {","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" private String path;","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" * Constructs an empty list with its storage path.","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" public StorableList(String path) {","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" * Saves to a file.","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" public void save() throws IOException {","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" Storage.save(path, this.stream().map(this::unparse));","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * Loads from a file.","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" public void load() {","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" Storage.load(path).map(this::parse).forEachOrdered(this::add);","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" this.clear();","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" * Parses a T object from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" * @return The T object parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" public abstract T parse(String s);","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" * Unparses a T object to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" * @param t The T object to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the T object.","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" public abstract String unparse(T t);","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"skylee03":51}},{"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":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"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 {","lastModifiedDate":"2023-10-27"},{"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-24"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" \"yyyy \u0027at\u0027 h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" public static final DateTimeFormatter TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"HH:mm:ss\",","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" Locale.ENGLISH);","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int columnWidth \u003d 40;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private String description;","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private final String caption;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private final LocalTime movingTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private final int distance;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" private int calories;","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" private final LocalDateTime startDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * Generates a new general sports activity with some basic stats.","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" public Activity(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime) {","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" this.movingTime \u003d movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" this.distance \u003d distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" this.caption \u003d caption;","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public LocalTime getMovingTime() {","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" return movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public int getDistance() {","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" return distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" public String getCaption() {","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" return caption;","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" public LocalDateTime getStartDateTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" return startDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" return this.calories;","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" public int getColumnWidth() {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" return columnWidth;","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the activity","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateShortMovingTimeStringOutput();","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" return \"[Activity] \" + caption + \" | \" + distanceOutput + \" | \" + movingTimeOutput + \" | \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" startDateTimeOutput;","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" * Returns distance in user-friendly output format.","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the distance","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" public String generateDistanceStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" double distanceInKm \u003d distance / 1000.0;","lastModifiedDate":"2023-10-13"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" return \"Distance: \" + String.format(Locale.ENGLISH, \"%.2f\", distanceInKm)","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" + \" km\";","lastModifiedDate":"2023-10-13"},{"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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" * Returns moving time in user-friendly output format.","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the moving time","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" public String generateMovingTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" return \"Time: \" + movingTime.format(TIME_FORMATTER);","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" * Returns a short representation of the moving time with the format depending on the duration.","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the moving time","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" public String generateShortMovingTimeStringOutput() {","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" if (movingTime.getHour() \u003e 0) {","lastModifiedDate":"2023-10-24"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" output +\u003d movingTime.getHour() + \"h \" + movingTime.getMinute() + \"m\";","lastModifiedDate":"2023-10-24"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-24"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" output +\u003d movingTime.getMinute() + \"m \" + movingTime.getSecond() + \"s\";","lastModifiedDate":"2023-10-24"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" return \"Time: \" + output;","lastModifiedDate":"2023-10-24"},{"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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" * Returns start date and time in user-friendly output format.","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the start date and time","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":" public String generateStartDateTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":" return startDateTime.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-24"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the activity.","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the activity","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Activity - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tCalories: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", \"...\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"AlWo223"},"content":" * Formats two strings into two columns of equal width.","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"AlWo223"},"content":" * @param left String to be placed in the left column","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"AlWo223"},"content":" * @param right String to be placed in the right column","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"AlWo223"},"content":" * @param columnWidth width of each column","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"AlWo223"},"content":" * @return a formatted string with two columns of equal width","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"AlWo223"},"content":" public String formatTwoColumns(String left, String right, int columnWidth) {","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%-\" + columnWidth + \"s%s\", left, right);","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":146,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":5,"AlWo223":141}},{"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":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class ActivityGoal extends Goal {","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" public enum GoalType {","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DURATION // can be extended","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" public enum Sport {","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" RUNNING, CYCLING, SWIMMING, GENERAL","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private int targetValue;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private final GoalType goalType;","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private final Sport sport;","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * Constructs an activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param timespan The timespan of the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param goalType The goal type of the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param sport The sport of the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param targetValue The target value of the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public ActivityGoal(Timespan timespan, GoalType goalType, Sport sport, int targetValue) {","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" super(timespan);","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" this.goalType \u003d goalType;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" this.sport \u003d sport;","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * Examines whether the activity goal is achieved.","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" * @param data The data containing the activity list.","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" * @return Whether the activity goal is achieved.","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" public boolean isAchieved(Data data) throws IllegalStateException {","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" int total \u003d getCurrentValue(data);","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" return total \u003e\u003d targetValue;","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" * Returns the current value of the activity goal metric.","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" * @param data The data containing the activity list.","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" * @return The current value of the activity goal metric.","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" public int getCurrentValue(Data data) throws IllegalStateException {","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" Class\u003c?\u003e activityClass \u003d getActivityClass();","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" int total;","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" switch(goalType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" case DISTANCE:","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" total \u003d activities.getTotalDistance(activityClass, this.getTimespan());","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" case DURATION:","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" total \u003d activities.getTotalDuration(activityClass, this.getTimespan());","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" total \u003d total / 60;","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" throw new IllegalStateException(\"Unexpected value: \" + goalType);","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" return total;","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" public void setTargetValue(int targetValue) {","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" * Returns the class of the activity associated with the activity goal.","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" * @return The class of the activity.","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" public Class\u003c?\u003e getActivityClass() {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" switch (this.sport) {","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" case RUNNING:","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" return Run.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" case CYCLING:","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" return Cycle.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" case SWIMMING:","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" return Swim.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" return Activity.class;","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" * Returns the string representation of the activity goal including progress information.","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" * @return The string representation of the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" public String toString(Data data) {","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" String goalTypeString \u003d goalType.name();","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" String sportString \u003d sport.name();","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" return (getTimespan().name().toLowerCase() + \" \" + sportString.toLowerCase() + \" \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" goalTypeString.toLowerCase() + \": \" + getCurrentValue(data) + \" / \" + targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" public GoalType getGoalType() {","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" return goalType;","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" public Sport getSport() {","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" return sport;","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" public int getTargetValue() {","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" return targetValue;","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"AlWo223":106}},{"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 static athleticli.storage.Config.PATH_ACTIVITY_GOAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.data.StorableList;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"public class ActivityGoalList extends StorableList\u003cActivityGoal\u003e {","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" * Constructs an activity goal list.","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" public ActivityGoalList() {","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" super(PATH_ACTIVITY_GOAL);","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * Parses an activity goal from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" * @return The activity goal parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" public ActivityGoal parse(String s) {","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" * Unparses an activity goal to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" * @param activityGoal The activity goal to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" public String unparse(ActivityGoal activityGoal) {","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":38}},{"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 static athleticli.storage.Config.PATH_ACTIVITY;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Findable;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"import athleticli.data.StorableList;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"public class ActivityList extends StorableList\u003cActivity\u003e implements Findable {","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * Constructs an empty activity list.","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" public ActivityList() {","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" super(PATH_ACTIVITY);","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" * Returns a list of activities matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * @return A list of activities matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cObject\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : this) {","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" if (activity.getStartDateTime().toLocalDate().equals(date)) {","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" result.add(activity);","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" * Sorts the activities in the list by date.","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public void sort() {","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" this.sort(Comparator.comparing(Activity::getStartDateTime).reversed());","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" * Returns a list of activities within the timespan.","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" * @param timespan The timespan to be matched.","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" * @return A list of activities within the timespan.","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" public ArrayList\u003cActivity\u003e filterByTimespan(Goal.Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : this) {","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" LocalDate activityDate \u003d activity.getStartDateTime().toLocalDate();","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" if (Goal.checkDate(activityDate, timespan)) {","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" result.add(activity);","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" * Returns the total distance of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" * @param activityClass The activity class to be matched.","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" * @return The total distance of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" public int getTotalDistance(Class\u003c?\u003e activityClass, Goal.Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e filteredActivities \u003d filterByTimespan(timespan);","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" int runningDistance \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : filteredActivities) {","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" if (activityClass.isInstance(activity)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" runningDistance +\u003d activity.getDistance();","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" return runningDistance;","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" * Returns the total moving time in seconds of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" * @param activityClass The activity class to be matched.","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" * @return The total moving time of all activities in the list matching the specified activity class.","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" public int getTotalDuration(Class\u003c?\u003e activityClass, Goal.Timespan timespan) {","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e filteredActivities \u003d filterByTimespan(timespan);","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" int movingTime \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" for (Activity activity : filteredActivities) {","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" if (activityClass.isInstance(activity)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d activity.getMovingTime();","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" movingTime +\u003d duration.getHour() * 3600 + duration.getMinute() * 60 + duration.getSecond();","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" return movingTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"skylee03"},"content":" * Parses an activity from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"skylee03"},"content":" * @return The activity parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"skylee03"},"content":" public Activity parse(String s) {","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"skylee03"},"content":" * Unparses an activity to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"skylee03"},"content":" * @param activity The activity to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the activity.","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"skylee03"},"content":" public String unparse(Activity activity) {","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":51,"AlWo223":67}},{"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":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" * Represents a cycling activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Cycle extends Activity {","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private final double averageSpeed;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * Generates a new cycling activity with cycling specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public Cycle(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" this.averageSpeed \u003d this.calculateAverageSpeed();","lastModifiedDate":"2023-10-11"},{"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 speed of the cycle in km/h.","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * @return average speed of the cycle in km/h","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" public double calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" double dist \u003d (double) this.getDistance();","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime().toSecondOfDay() / 3600;","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" return (dist/1000) / time;","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"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":" * Returns a single line summary of the cycling activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the cycle","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Cycle]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d generateSpeedStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Speed: \" + speedOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * Returns a string representation of the average speed of the cycle.","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the average speed of the cycle","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public String generateSpeedStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" return String.format(Locale.ENGLISH, \"%.2f\", this.averageSpeed) + \" km/h\";","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the cycle.","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the cycle","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d generateSpeedStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Cycle - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\t\" + movingTimeOutput, \"Avg Speed: \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" speedOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Max Speed: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" \"tbd\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" public int getElevationGain() {","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" return this.elevationGain;","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":1,"AlWo223":86}},{"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":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"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 {","lastModifiedDate":"2023-10-27"},{"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, LocalTime movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-24"},{"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().toSecondOfDay() / 60;","lastModifiedDate":"2023-10-24"},{"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(\"\\t\" + distanceOutput, \"Avg Pace: \" + paceOutput,","lastModifiedDate":"2023-10-23"},{"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":" public int getElevationGain() {","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" return elevationGain;","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":1,"AlWo223":91}},{"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":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" * Represents a swimming activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class Swim extends Activity {","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" private final int laps;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final SwimmingStyle style;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final int averageLapTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" public enum SwimmingStyle {","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" BUTTERFLY,","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" BACKSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" BREASTSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" FREESTYLE","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * Generates a new swimming activity with swimming specific stats.","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * averageLapTime is calculated automatically based on the movingTime and laps.","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in HH:mm:ss format","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" * @param style swimming style","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" public Swim(String caption, LocalTime movingTime, int distance, LocalDateTime startDateTime, SwimmingStyle style) {","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" this.laps \u003d this.calculateLaps();","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" this.style \u003d style;","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" this.averageLapTime \u003d this.calculateAverageLapTime();","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" * Calculates the average lap time in seconds.","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" * @return average lap time in seconds","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public int calculateAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" return this.getMovingTime().toSecondOfDay() / this.laps;","lastModifiedDate":"2023-10-24"},{"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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" * Calculates the number of laps.","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" * @return number of laps","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" public int calculateLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" return this.getDistance() / 50;","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" public int getLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" return laps;","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public int getAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" return averageLapTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" * Returns a short string representation of the swim.","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the swim","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Swim]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String averageLapTimeOutput \u003d this.averageLapTime + \"s\";","lastModifiedDate":"2023-10-13"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Avg Lap Time: \" + averageLapTimeOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the swim.","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the swim","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Swim - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\t\" + distanceOutput, movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tLaps: \" + this.getLaps(), \"Style: \"","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" + this.getStyle(), columnWidth);","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tAvg Lap Time: \" + averageLapTime + \" s\", \"Calories: \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" public SwimmingStyle getStyle() {","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" return style;","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":1,"AlWo223":98}},{"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":"nihalzp"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" * Defines the basic fields and methods of a diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Diet {","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" public static final DateTimeFormatter DATE_TIME_FORMATTER \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" DateTimeFormatter.ofPattern(\"MMMM d, \" + \"yyyy \u0027at\u0027 h:mm a\", Locale.ENGLISH);","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private int calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private int protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private int carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private int fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-10-25"},{"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":" * Constructs a \u003ccode\u003eDiet\u003c/code\u003e object.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * @param dateTime The date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" public Diet(int calories, int protein, int carb, int fat, LocalDateTime dateTime) {","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" assert calories \u003e\u003d 0 : \"Calories cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" assert protein \u003e\u003d 0 : \"Protein cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" assert carb \u003e\u003d 0 : \"Carb cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" assert fat \u003e\u003d 0 : \"Fat cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" * Returns 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":" * @return The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" return calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" * Sets the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" public void setCalories(int calories) {","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" assert calories \u003e\u003d 0 : \"Calories cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" * Returns the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" * @return Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" public int getProtein() {","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" return protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" * Sets the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" public void setProtein(int protein) {","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" assert protein \u003e\u003d 0 : \"Protein cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" * Returns the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" * @return Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" public int getCarb() {","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" return carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" * Sets the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" public void setCarb(int carb) {","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" assert carb \u003e\u003d 0 : \"Carb cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" * Returns the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" * @return Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" public int getFat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" return fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" * Sets the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":" public void setFat(int fat) {","lastModifiedDate":"2023-10-14"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" assert fat \u003e\u003d 0 : \"Fat cannot be negative\";","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" * Returns the date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" * @return The date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" return dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" * Sets the date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":" * @param dateTime The date and time of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" public void setDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet.","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" return \"Calories: \" + calories + \" Protein: \" + protein + \" Carb: \" + carb + \" Fat: \" + fat +","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" \" Date: \" + dateTime.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":145,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":5,"nihalzp":140}},{"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":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":" * Represents a diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class DietGoal {","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" private String nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" private int targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private int currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private boolean isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal with no current value.","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" public DietGoal(String nutrients, int targetValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" currentValue \u003d 0;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" isGoalAchieved \u003d false;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal with a current value.","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * @param currentValue The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public DietGoal(String nutrients, int targetValue, int currentValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" this.currentValue \u003d currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" isGoalAchieved \u003d currentValue \u003e\u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" * Returns the nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" * @return 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":" public String getNutrients() {","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" return nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" * Sets the nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" * @param nutrients 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":" public void setNutrients(String nutrients) {","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" * Returns the target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" * @return 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":" public int getTargetValue() {","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" return targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" * Sets the target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" * @param targetValue 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":" public void setTargetValue(int targetValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" setIsGoalAchieved(currentValue \u003e\u003d targetValue);","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" * Returns the current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" * @return 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":" public int getCurrentValue() {","lastModifiedDate":"2023-10-13"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" return currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" * Sets the current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" * @param currentValue 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":" public void setCurrentValue(int currentValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" this.currentValue \u003d currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" setIsGoalAchieved(currentValue \u003e\u003d targetValue);","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" * Returns whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" * @return 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":" public boolean getIsGoalAchieved() {","lastModifiedDate":"2023-10-13"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" return isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" * Sets whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" * @param isGoalAchieved 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":" private void setIsGoalAchieved(boolean isGoalAchieved) {","lastModifiedDate":"2023-10-13"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" this.isGoalAchieved \u003d isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":" * Returns the string representation of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" * @return 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":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" return nutrients + \" intake progress: (\" + currentValue + \"/\" + targetValue + \")\\n\";","lastModifiedDate":"2023-10-14"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":122,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"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 static athleticli.storage.Config.PATH_DIET_GOAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.data.StorableList;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diet goals.","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class DietGoalList extends StorableList\u003cDietGoal\u003e {","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" public DietGoalList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" super(PATH_DIET_GOAL);","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" result.append(\"\\t\").append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" * Parses a diet goal from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" * @return The diet goal parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" public DietGoal parse(String s) {","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" * Unparses a diet goal to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" * @param dietGoal The diet goal to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the diet goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" public String unparse(DietGoal dietGoal) {","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":33,"yicheng-toh":1,"nihalzp":24}},{"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 static athleticli.storage.Config.PATH_DIET;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Findable;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.data.StorableList;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diets.","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"public class DietList extends StorableList\u003cDiet\u003e implements Findable {","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" public DietList() {","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" super(PATH_DIET);","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" result.append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" * Returns a list of diets matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" * @return A list of diets matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" ArrayList\u003cObject\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" for (Diet diet : this) {","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" if (diet.getDateTime().toLocalDate().equals(date)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" result.add(diet);","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" return result;","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" * Parses a diet from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" * @return The diet parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" public Diet parse(String s) {","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" * Unparses a diet to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" * @param diet The diet to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the diet.","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" public String unparse(Diet diet) {","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":46,"nihalzp":34}},{"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":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":" * Represents a sleep record.","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class Sleep {","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd-MM-YYYY HH:mm\");","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" * Constructor for Sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" * @param from Start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" * @param to End time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" public Sleep(LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" * toString method for Sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" * @return String representation of the sleep record.","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" return \"sleep record from \" + from.format(DATE_TIME_FORMATTER) + \" to \" + to.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"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":"public class SleepGoal {","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"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 static athleticli.storage.Config.PATH_SLEEP_GOAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.StorableList;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class SleepGoalList extends StorableList\u003cSleepGoal\u003e {","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" * Constructs a sleep goal list.","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" public SleepGoalList() {","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" super(PATH_SLEEP_GOAL);","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" * Parses a sleep goal from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @return The sleep goal parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" public SleepGoal parse(String s) {","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" * Unparses a sleep goal to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" * @param sleepGoal The sleep goal to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the sleep goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" public String unparse(SleepGoal sleepGoal) {","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":38,"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 static athleticli.storage.Config.PATH_SLEEP;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Findable;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.data.StorableList;","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" * Represents a list of sleep records.","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"public class SleepList extends StorableList\u003cSleep\u003e implements Findable {","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * Constructs a sleep list with its storage path.","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" public SleepList() {","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" super(PATH_SLEEP);","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" * Returns a list of sleeps matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * @param date The date to be matched.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * @return A list of sleeps matching the date.","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" public ArrayList\u003cObject\u003e find(LocalDate date) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" * Parses a sleep from a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" * @return The sleep parsed from the string.","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" public Sleep parse(String s) {","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" * Unparses a sleep to a string.","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" * @param sleep The sleep to be parsed.","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" * @return The string unparsed from the sleep.","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" public String unparse(Sleep sleep) {","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" // TODO","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" return null;","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":54,"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/exceptions/WrappedIOException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.exceptions;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" * Wraps an \u003ccode\u003eIOException\u003c/code\u003e in \u003ccode\u003eRuntimeExcpetion\u003c/code\u003e so that it can be thrown from inside a stream.","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public class WrappedIOException extends RuntimeException {","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" private IOException cause;","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" public WrappedIOException(IOException cause) {","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" this.cause \u003d cause;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" public IOException getCause() {","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" return cause;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"skylee03":19}},{"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_ACTIVITY \u003d \"./data/activity.txt\";","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" public static final String PATH_ACTIVITY_GOAL \u003d \"./data/activity_goal.txt\";","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" public static final String PATH_SLEEP \u003d \"./data/sleep.txt\";","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" public static final String PATH_SLEEP_GOAL \u003d \"./data/sleep_goal.txt\";","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" public static final String PATH_DIET \u003d \"./data/diet.txt\";","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" public static final String PATH_DIET_GOAL \u003d \"./data/diet_goal.txt\";","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":13}},{"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.FileWriter;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.WrappedIOException;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for file storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"public class Storage {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Saves strings into a file.","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @param path The path to the file.","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @param items The stream of strings.","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @throws IOException","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" public static void save(String path, Stream\u003cString\u003e items) throws IOException {","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" file.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" FileWriter fileWriter \u003d new FileWriter(file);","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" items.filter(Objects::nonNull).forEachOrdered(str -\u003e {","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" fileWriter.write(str);","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" throw new WrappedIOException(e);","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" });","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" } catch (WrappedIOException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" throw e.getCause();","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" fileWriter.close();","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" public static Stream\u003cString\u003e load(String path) throws IOException {","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" return Files.lines(Path.of(path));","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":48}},{"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":"skylee03"},"content":" public static final String COMMAND_FIND \u003d \"find\";","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_ADD \u003d \"add-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_EDIT \u003d \"edit-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_DELETE \u003d \"delete-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_LIST \u003d \"list-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_SLEEP_FIND \u003d \"find-sleep\";","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN \u003d \"add-run\";","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY \u003d \"add-activity\";","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE \u003d \"add-cycle\";","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM \u003d \"add-swim\";","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_DELETE \u003d \"delete-activity\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_LIST \u003d \"list-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_EDIT \u003d \"edit-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_ACTIVITY_FIND \u003d \"find-activity\";","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN_EDIT \u003d \"edit-run\";","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE_EDIT \u003d \"edit-cycle\";","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM_EDIT \u003d \"edit-swim\";","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_GOAL_SET \u003d \"set-activity-goal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_SET \u003d \"set-diet-goal\";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_EDIT \u003d \"edit-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_LIST \u003d \"list-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_DELETE \u003d \"delete-diet-goal\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_ADD \u003d \"add-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_DELETE \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_EDIT \u003d \"edit-diet\";","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_LIST \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_DIET_FIND \u003d \"find-diet\";","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":18,"DaDevChia":6,"AlWo223":11,"yicheng-toh":4,"nihalzp":4}},{"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":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_SPORT_MISSING \u003d \"Please specify the sport using \\\"sport/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_TYPE_MISSING \u003d \"Please specify the goal type using \\\"type/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_PERIOD_MISSING \u003d \"Please specify the period using \\\"period/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITYGOAL_TARGET_MISSING \u003d \"Please specify the target value using \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" \"\\\"target/\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" \"Please specify the protein intake using \\\"protein/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" \"Please specify the carbohydrate intake using \\\"carb/\\\"!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_MISSING \u003d \"Please specify the fat intake using \\\"fat/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DATETIME_MISSING \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" \"Please specify the datetime of the diet using \\\"datetime/\\\"!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"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":33,"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":34,"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":35,"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":36,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_EMPTY \u003d \"The calories burned cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_EMPTY \u003d \"The protein intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_EMPTY \u003d \"The carbohydrate intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_EMPTY \u003d \"The fat intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DATETIME_EMPTY \u003d \"The datetime of a diet cannot be empty!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_UPDATED \u003d \"Ok, I\u0027ve updated this diet:\";","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DURATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" \"The duration of an activity must be in the format \\\"hh:mm:ss\\\"!\";","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DISTANCE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" \"The distance of an activity must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DISTANCE_NEGATIVE \u003d","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" \"The distance of an activity cannot be negative!\";","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_TARGET_NEGATIVE \u003d \"The target value cannot be negative. \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" \"You wanna make progress, not regress ;)\";","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_TARGET_INVALID \u003d \"The target value of an activity goal must be a positive \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" \"integer!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATETIME_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" \"The datetime must be in the format \\\"yyyy-MM-dd HH:mm\\\"!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATE_INVALID \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" \"The date must be in the format \\\"yyyy-MM-dd\\\"!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" \"The calories burned must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_SPORT_INVALID \u003d \"The sport of an activity must be one of the following: \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" \"\\\"running\\\", \\\"cycling\\\", \\\"swimming\\\", \\\"general\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_TYPE_INVALID \u003d \"The type of an activity must be either \\\"distance\\\" or \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" \"\\\"duration\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_PERIOD_INVALID \u003d \"The period of an activity must be either \\\"weekly\\\" or \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" \"\\\"monthly\\\"!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"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":65,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" \"The carbohydrate intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"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":68,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_ACTIVITY_FIND \u003d \"I\u0027ve found these activities:\";","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_ADDED \u003d \"Well done! I\u0027ve added this activity:\";","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_GOAL_ADDED \u003d \"Alright, I\u0027ve added this activity goal:\";","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_DELETED \u003d \"Gotcha, I\u0027ve deleted this activity:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_ADDED \u003d \"Well done! I\u0027ve added this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" \"Please specify the elevation gain using \\\"elevation/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_ELEVATION_EMPTY \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" \"The elevation gain of an activity cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" \"The elevation gain of an activity must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"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":80,"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":81,"author":{"gitId":"AlWo223"},"content":" \"list for the correct index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" \"Please specify the swimming style using \\\"style/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" \"The swimming style of an activity must be one of \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" \"the following: \\\"butterfly\\\", \\\"backstroke\\\", \\\"breaststroke\\\", \\\"freestyle\\\"!\";","lastModifiedDate":"2023-10-13"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" \"You have tracked a total of %d activities. Keep pushing!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"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":90,"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":91,"author":{"gitId":"AlWo223"},"content":" \" provide the index and the updated entry!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_UPDATED \u003d \"Ok, I\u0027ve updated this activity:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of %d diets. Keep grinding!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first activity. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"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":99,"author":{"gitId":"yicheng-toh"},"content":" \"must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"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":101,"author":{"gitId":"yicheng-toh"},"content":" \"following: \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"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":103,"author":{"gitId":"yicheng-toh"},"content":" \"Please edit the goal instead!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"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":105,"author":{"gitId":"yicheng-toh"},"content":" \"Please add the goal before editing it!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"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":107,"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":108,"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":109,"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":110,"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":111,"author":{"gitId":"yicheng-toh"},"content":" \"Please add one to continue.\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"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":113,"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":114,"author":{"gitId":"yicheng-toh"},"content":" \"Please enter a value from 1 to %d.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INSUFFICIENT_INPUT \u003d \"Please input the following keywords \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"yicheng-toh"},"content":" \"to create or edit your diet goals:\\n \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\" \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":117,"author":{"gitId":"yicheng-toh"},"content":" \"followed by the target value.\\n\" + \"\\te.g. calories/100\";","lastModifiedDate":"2023-10-24"},{"lineNumber":118,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSSAGE_DIETGOAL_REPEATED_NUTRIENT \u003d \"Please ensure that there are \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"yicheng-toh"},"content":" \"no repetitions for your diet goal nutrients.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first diet. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_INVALID_DIET_INDEX \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" \"The diet index is invalid! Please enter a valid diet index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_INDEX_TYPE_INVALID \u003d \"The diet index must be a positive integer!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DELETED \u003d \"Noted. I\u0027ve removed this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_LIST \u003d \"Here are the diets in your list:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_DIET_FIND \u003d \"I\u0027ve found these diets:\";","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_NO_CHANGE_REQUESTED \u003d \"No change requested. Specify the appropriate \" +","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" \"parameters to edit the diet.\";","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"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":132,"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":133,"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":134,"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":135,"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":136,"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":137,"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":138,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_SLEEP_FIND \u003d \"I\u0027ve found these sleeps:\";","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"DaDevChia"},"content":" \"Invalid date-time format. Please use dd-MM-yyyy HH:mm.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"DaDevChia"},"content":" \"Please specify both the start and end time of your sleep.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the start time of your sleep before the end time.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to delete.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to edit.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE \u003d ","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to edit is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_DELETE_INDEX_OOBE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to delete is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"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":155,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_IO_EXCEPTION \u003d \"An I/O exception occurred.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":157,"author":{"gitId":"skylee03"},"content":" /* Help Messages */","lastModifiedDate":"2023-10-21"},{"lineNumber":158,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY","lastModifiedDate":"2023-10-21"},{"lineNumber":159,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":160,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_RUN \u003d CommandName.COMMAND_RUN","lastModifiedDate":"2023-10-21"},{"lineNumber":161,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":162,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SWIM \u003d CommandName.COMMAND_SWIM","lastModifiedDate":"2023-10-21"},{"lineNumber":163,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":164,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_CYCLE \u003d CommandName.COMMAND_CYCLE","lastModifiedDate":"2023-10-21"},{"lineNumber":165,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":166,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":167,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":168,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_LIST","lastModifiedDate":"2023-10-21"},{"lineNumber":169,"author":{"gitId":"skylee03"},"content":" + \" [-d]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":170,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":171,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":172,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_RUN \u003d CommandName.COMMAND_RUN_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":173,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":174,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SWIM \u003d CommandName.COMMAND_SWIM_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":175,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":176,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_CYCLE \u003d CommandName.COMMAND_CYCLE_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":177,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":178,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":180,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_DIET \u003d CommandName.COMMAND_DIET_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":181,"author":{"gitId":"nihalzp"},"content":" + \" calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME\";","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"nihalzp"},"content":" public static final String HELP_EDIT_DIET \u003d CommandName.COMMAND_DIET_EDIT","lastModifiedDate":"2023-10-26"},{"lineNumber":183,"author":{"gitId":"nihalzp"},"content":" + \" INDEX calories/CALORIES protein/PROTEIN carb/CARB fat/FAT datetime/DATETIME\";","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_DIET \u003d CommandName.COMMAND_DIET_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":185,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":186,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_DIET \u003d CommandName.COMMAND_DIET_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":187,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND_DIET \u003d CommandName.COMMAND_DIET_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":188,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":189,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SLEEP \u003d CommandName.COMMAND_SLEEP_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":190,"author":{"gitId":"skylee03"},"content":" + \" start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":191,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_SLEEP \u003d CommandName.COMMAND_SLEEP_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":192,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_SLEEP \u003d CommandName.COMMAND_SLEEP_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":193,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":194,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SLEEP \u003d CommandName.COMMAND_SLEEP_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":195,"author":{"gitId":"skylee03"},"content":" + \" INDEX start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":196,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND_SLEEP \u003d CommandName.COMMAND_SLEEP_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":197,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":198,"author":{"gitId":"skylee03"},"content":" public static final String HELP_SAVE \u003d CommandName.COMMAND_SAVE;","lastModifiedDate":"2023-10-22"},{"lineNumber":199,"author":{"gitId":"skylee03"},"content":" public static final String HELP_BYE \u003d CommandName.COMMAND_BYE;","lastModifiedDate":"2023-10-21"},{"lineNumber":200,"author":{"gitId":"skylee03"},"content":" public static final String HELP_HELP \u003d CommandName.COMMAND_HELP","lastModifiedDate":"2023-10-21"},{"lineNumber":201,"author":{"gitId":"skylee03"},"content":" + \" [COMMAND]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":202,"author":{"gitId":"skylee03"},"content":" public static final String HELP_FIND \u003d CommandName.COMMAND_FIND","lastModifiedDate":"2023-10-23"},{"lineNumber":203,"author":{"gitId":"skylee03"},"content":" + \" DATE\";","lastModifiedDate":"2023-10-23"},{"lineNumber":204,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DETAILS \u003d","lastModifiedDate":"2023-10-21"},{"lineNumber":205,"author":{"gitId":"skylee03"},"content":" \"Please check our user guide (https://ay2324s1-cs2113-t17-1.github.io/tp/) for details.\";","lastModifiedDate":"2023-10-21"},{"lineNumber":206,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":63,"DaDevChia":22,"AlWo223":35,"yicheng-toh":26,"nihalzp":60}},{"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"}],"authorContributionMap":{"yicheng-toh":20}},{"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":"nihalzp"},"content":" public static final String CALORIES_SEPARATOR \u003d \"calories/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" public static final String PROTEIN_SEPARATOR \u003d \"protein/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" public static final String CARB_SEPARATOR \u003d \"carb/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" public static final String FAT_SEPARATOR \u003d \"fat/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" public static final String START_TIME_SEPARATOR \u003d \"start/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" public static final String END_TIME_SEPARATOR \u003d \"end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public static final String SPORT_SEPARATOR \u003d \"sport/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public static final String TYPE_SEPARATOR \u003d \"type/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String PERIOD_SEPARATOR \u003d \"period/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String TARGET_SEPARATOR \u003d \"target/\";","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DaDevChia":3,"AlWo223":15,"nihalzp":5}},{"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.FindCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.HelpCommand;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.SaveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.AddDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.DeleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.DeleteDietGoalCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.EditDietCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.EditDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.diet.FindDietCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.ListDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.SetDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.sleep.FindSleepCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Cycle;","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Swim;","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.AddActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.DeleteActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.EditActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.FindActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.ListActivityCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.SetActivityGoalCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for command parser.","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":"public class Parser {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" private static final DateTimeFormatter sleepTimeFormatter \u003d","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"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":61,"author":{"gitId":"nihalzp"},"content":" * while the second part is the command arguments. The second part can be empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" * @return A string array whose first element is the command type and the second element is the command","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" * arguments.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" public static String[] splitCommandWordAndArgs(String rawUserInput) {","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" final String[] split \u003d rawUserInput.trim().split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" return split.length \u003d\u003d 2 ? split : new String[]{split[0], \"\"};","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" * Parses the raw user input and returns the corresponding command object.","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" * @return An object representing the command.","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" public static Command parseCommand(String rawUserInput) throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" final String[] commandTypeAndParams \u003d splitCommandWordAndArgs(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" final String commandType \u003d commandTypeAndParams[0];","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" final String commandArgs \u003d commandTypeAndParams[1];","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_BYE:","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" return new ByeCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_HELP:","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" return new HelpCommand(commandArgs);","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_SAVE:","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"skylee03"},"content":" return new FindCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_ADD:","lastModifiedDate":"2023-10-12"},{"lineNumber":96,"author":{"gitId":"DaDevChia"},"content":" return parseSleepAdd(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":97,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_LIST:","lastModifiedDate":"2023-10-12"},{"lineNumber":98,"author":{"gitId":"DaDevChia"},"content":" return new ListSleepCommand();","lastModifiedDate":"2023-10-12"},{"lineNumber":99,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_EDIT:","lastModifiedDate":"2023-10-12"},{"lineNumber":100,"author":{"gitId":"DaDevChia"},"content":" return parseSleepEdit(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":101,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_DELETE:","lastModifiedDate":"2023-10-12"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":" return parseSleepDelete(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_SLEEP_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"skylee03"},"content":" return new FindSleepCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY:","lastModifiedDate":"2023-10-13"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseActivity(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE:","lastModifiedDate":"2023-10-13"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, false));","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN:","lastModifiedDate":"2023-10-13"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, true));","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM:","lastModifiedDate":"2023-10-13"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseSwim(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"AlWo223"},"content":" return new DeleteActivityCommand(parseActivityIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_LIST:","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"AlWo223"},"content":" return new ListActivityCommand(parseActivityListDetail(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" return new EditActivityCommand(parseActivityEdit(commandArgs),","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseRunEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseCycleEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseSwimEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_ACTIVITY_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" return new FindActivityCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_GOAL_SET:","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"AlWo223"},"content":" return new SetActivityGoalCommand(parseActivityGoal(commandArgs));","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_SET:","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"yicheng-toh"},"content":" return new SetDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_EDIT:","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"yicheng-toh"},"content":" return new EditDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"yicheng-toh"},"content":" return new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_DELETE:","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"yicheng-toh"},"content":" return new DeleteDietGoalCommand(parseDietGoalDelete(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_ADD:","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" return new AddDietCommand(parseDiet(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_EDIT:","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" return new EditDietCommand(parseDietIndex(commandArgs), parseDietEdit(commandArgs));","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":" return new DeleteDietCommand(parseDietIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_LIST:","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":" return new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_DIET_FIND:","lastModifiedDate":"2023-10-23"},{"lineNumber":149,"author":{"gitId":"skylee03"},"content":" return new FindDietCommand(parseDate(commandArgs));","lastModifiedDate":"2023-10-23"},{"lineNumber":150,"author":{"gitId":"skylee03"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":151,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":153,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":154,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":155,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity.","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"AlWo223"},"content":" public static int parseActivityIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"AlWo223"},"content":" final String commandArgsTrimmed \u003d commandArgs.trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"AlWo223"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"AlWo223"},"content":" index \u003d Integer.parseInt(commandArgsTrimmed);","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"AlWo223"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated activity for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated activity.","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed Activity object.","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"AlWo223"},"content":" public static Activity parseActivityEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":181,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":182,"author":{"gitId":"AlWo223"},"content":" return parseActivity(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":183,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":186,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":187,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":188,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated run for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated run.","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed run object.","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"AlWo223"},"content":" public static Activity parseRunEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":196,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":197,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], true);","lastModifiedDate":"2023-10-17"},{"lineNumber":198,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":200,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":201,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":202,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated cycle for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":206,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated cycle.","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed cycle object.","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"AlWo223"},"content":" public static Activity parseCycleEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":211,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":212,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], false);","lastModifiedDate":"2023-10-17"},{"lineNumber":213,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":214,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":215,"author":{"gitId":"AlWo223"},"content":" }","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-18"},{"lineNumber":219,"author":{"gitId":"AlWo223"},"content":" * Parses the provided update swim for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":221,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated swim.","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed swim object.","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"AlWo223"},"content":" public static Activity parseSwimEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":226,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"AlWo223"},"content":" return parseSwim(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":228,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":229,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":230,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":231,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":232,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":233,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity update for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":236,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the index.","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"AlWo223"},"content":" public static int parseActivityEditIndex(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":241,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":242,"author":{"gitId":"AlWo223"},"content":" return parseActivityIndex(arguments.split(\" \", 2)[0]);","lastModifiedDate":"2023-10-17"},{"lineNumber":243,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":244,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":245,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":246,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":247,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":248,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":249,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for viewing the activity list and returns whether the user wants the detailed","lastModifiedDate":"2023-10-25"},{"lineNumber":250,"author":{"gitId":"nihalzp"},"content":" * view","lastModifiedDate":"2023-10-25"},{"lineNumber":251,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":252,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-17"},{"lineNumber":253,"author":{"gitId":"AlWo223"},"content":" * @return boolean Whether the user wants the detailed view.","lastModifiedDate":"2023-10-17"},{"lineNumber":254,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":255,"author":{"gitId":"AlWo223"},"content":" public static boolean parseActivityListDetail(String commandArgs) {","lastModifiedDate":"2023-10-23"},{"lineNumber":256,"author":{"gitId":"AlWo223"},"content":" return commandArgs.toLowerCase().contains(Parameter.DETAIL_FLAG);","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":258,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":259,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":260,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for an activity and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":261,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":262,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":263,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":264,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-23"},{"lineNumber":265,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":266,"author":{"gitId":"AlWo223"},"content":" public static Activity parseActivity(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":267,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":268,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":269,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":270,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":271,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":272,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":273,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":274,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":275,"author":{"gitId":"nihalzp"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":276,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":277,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":278,"author":{"gitId":"nihalzp"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":279,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":280,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":281,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":282,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":283,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":284,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":285,"author":{"gitId":"AlWo223"},"content":" final LocalTime durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":286,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":287,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":288,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":289,"author":{"gitId":"AlWo223"},"content":" return new Activity(caption, durationParsed, distanceParsed, datetimeParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":290,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":291,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":292,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":293,"author":{"gitId":"AlWo223"},"content":" * Parses the raw activity duration input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":294,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":295,"author":{"gitId":"AlWo223"},"content":" * @param duration The raw user input containing the duration.","lastModifiedDate":"2023-10-22"},{"lineNumber":296,"author":{"gitId":"AlWo223"},"content":" * @return durationParsed The parsed LocalTime duration.","lastModifiedDate":"2023-10-25"},{"lineNumber":297,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-22"},{"lineNumber":298,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":299,"author":{"gitId":"AlWo223"},"content":" public static LocalTime parseDuration(String duration) throws AthletiException {","lastModifiedDate":"2023-10-24"},{"lineNumber":300,"author":{"gitId":"AlWo223"},"content":" LocalTime durationParsed;","lastModifiedDate":"2023-10-24"},{"lineNumber":301,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":302,"author":{"gitId":"AlWo223"},"content":" durationParsed \u003d LocalTime.parse(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":303,"author":{"gitId":"AlWo223"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":304,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":305,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":306,"author":{"gitId":"AlWo223"},"content":" return durationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":307,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":308,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":309,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":310,"author":{"gitId":"AlWo223"},"content":" * Parses the raw date time input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":311,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":312,"author":{"gitId":"AlWo223"},"content":" * @param datetime The raw user input containing the date time.","lastModifiedDate":"2023-10-22"},{"lineNumber":313,"author":{"gitId":"AlWo223"},"content":" * @return datetimeParsed The parsed LocalDateTime object.","lastModifiedDate":"2023-10-22"},{"lineNumber":314,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-22"},{"lineNumber":315,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":316,"author":{"gitId":"AlWo223"},"content":" public static LocalDateTime parseDateTime(String datetime) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":317,"author":{"gitId":"AlWo223"},"content":" LocalDateTime datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":318,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":319,"author":{"gitId":"AlWo223"},"content":" datetimeParsed \u003d LocalDateTime.parse(datetime.replace(\" \", \"T\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":320,"author":{"gitId":"AlWo223"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":321,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":322,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":323,"author":{"gitId":"AlWo223"},"content":" return datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":324,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":325,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":326,"author":{"gitId":"skylee03"},"content":" public static LocalDate parseDate(String date) throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":327,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":328,"author":{"gitId":"skylee03"},"content":" return LocalDate.parse(date);","lastModifiedDate":"2023-10-23"},{"lineNumber":329,"author":{"gitId":"skylee03"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":330,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DATE_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":331,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":332,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":333,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":334,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":335,"author":{"gitId":"AlWo223"},"content":" * Parses the raw activity distance input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":336,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":337,"author":{"gitId":"AlWo223"},"content":" * @param distance The raw user input containing the distance.","lastModifiedDate":"2023-10-22"},{"lineNumber":338,"author":{"gitId":"AlWo223"},"content":" * @return distanceParsed The parsed Integer distance.","lastModifiedDate":"2023-10-22"},{"lineNumber":339,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-22"},{"lineNumber":340,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":341,"author":{"gitId":"AlWo223"},"content":" public static int parseDistance(String distance) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":342,"author":{"gitId":"AlWo223"},"content":" int distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":343,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":344,"author":{"gitId":"AlWo223"},"content":" distanceParsed \u003d Integer.parseInt(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":345,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":346,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":347,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":348,"author":{"gitId":"AlWo223"},"content":" if (distanceParsed \u003c 0) {","lastModifiedDate":"2023-10-23"},{"lineNumber":349,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_NEGATIVE);","lastModifiedDate":"2023-10-23"},{"lineNumber":350,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":351,"author":{"gitId":"AlWo223"},"content":" return distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":352,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":353,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":354,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":355,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating an activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":356,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":357,"author":{"gitId":"AlWo223"},"content":" * @param durationIndex The position of the duration separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":358,"author":{"gitId":"AlWo223"},"content":" * @param distanceIndex The position of the distance separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":359,"author":{"gitId":"AlWo223"},"content":" * @param datetimeIndex The position of the datetime separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":360,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-22"},{"lineNumber":361,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":362,"author":{"gitId":"nihalzp"},"content":" public static void checkMissingActivityArguments(int durationIndex, int distanceIndex,","lastModifiedDate":"2023-10-15"},{"lineNumber":363,"author":{"gitId":"nihalzp"},"content":" int datetimeIndex) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":364,"author":{"gitId":"AlWo223"},"content":" if (durationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":365,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":366,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":367,"author":{"gitId":"AlWo223"},"content":" if (distanceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":368,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":369,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":370,"author":{"gitId":"AlWo223"},"content":" if (datetimeIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":371,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":372,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":373,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":374,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":375,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":376,"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":377,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":378,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":379,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":380,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":381,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":382,"author":{"gitId":"AlWo223"},"content":" public static Activity parseRunCycle(String arguments, boolean isRun) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":383,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":384,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":385,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":386,"author":{"gitId":"AlWo223"},"content":" final int elevationIndex \u003d arguments.indexOf(Parameter.ELEVATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":387,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":388,"author":{"gitId":"AlWo223"},"content":" checkMissingRunCycleArguments(durationIndex, distanceIndex, datetimeIndex, elevationIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":389,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":390,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":391,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":392,"author":{"gitId":"nihalzp"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":393,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":394,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":395,"author":{"gitId":"nihalzp"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":396,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":397,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":398,"author":{"gitId":"nihalzp"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), elevationIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":399,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":400,"author":{"gitId":"AlWo223"},"content":" final String elevation \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":401,"author":{"gitId":"AlWo223"},"content":" arguments.substring(elevationIndex + Parameter.ELEVATION_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":402,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":403,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":404,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":405,"author":{"gitId":"AlWo223"},"content":" final LocalTime durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":406,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":407,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":408,"author":{"gitId":"AlWo223"},"content":" final int elevationParsed \u003d parseElevation(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":409,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":410,"author":{"gitId":"AlWo223"},"content":" if (isRun) {","lastModifiedDate":"2023-10-17"},{"lineNumber":411,"author":{"gitId":"AlWo223"},"content":" return new Run(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":412,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":413,"author":{"gitId":"AlWo223"},"content":" return new Cycle(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-17"},{"lineNumber":414,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":415,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":416,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":417,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":418,"author":{"gitId":"AlWo223"},"content":" * Parses the raw elevation input provided by the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":419,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":420,"author":{"gitId":"AlWo223"},"content":" * @param elevation The raw user input containing the elevation.","lastModifiedDate":"2023-10-22"},{"lineNumber":421,"author":{"gitId":"AlWo223"},"content":" * @return elevationParsed The parsed Integer elevation.","lastModifiedDate":"2023-10-22"},{"lineNumber":422,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-22"},{"lineNumber":423,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":424,"author":{"gitId":"AlWo223"},"content":" public static int parseElevation(String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":425,"author":{"gitId":"AlWo223"},"content":" int elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":426,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":427,"author":{"gitId":"AlWo223"},"content":" elevationParsed \u003d Integer.parseInt(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":428,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":429,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":430,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":431,"author":{"gitId":"AlWo223"},"content":" return elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":432,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":433,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":434,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":435,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating a run or cycle.","lastModifiedDate":"2023-10-22"},{"lineNumber":436,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":437,"author":{"gitId":"AlWo223"},"content":" * @param durationIndex The position of the duration separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":438,"author":{"gitId":"AlWo223"},"content":" * @param distanceIndex The position of the distance separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":439,"author":{"gitId":"AlWo223"},"content":" * @param datetimeIndex The position of the datetime separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":440,"author":{"gitId":"AlWo223"},"content":" * @param elevationIndex The position of the elevation separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":441,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-22"},{"lineNumber":442,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":443,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingRunCycleArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":444,"author":{"gitId":"AlWo223"},"content":" int elevationIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":445,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":446,"author":{"gitId":"AlWo223"},"content":" if (elevationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":447,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":448,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":449,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":450,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":451,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":452,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating a swim.","lastModifiedDate":"2023-10-22"},{"lineNumber":453,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":454,"author":{"gitId":"AlWo223"},"content":" * @param durationIndex The position of the duration separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":455,"author":{"gitId":"AlWo223"},"content":" * @param distanceIndex The position of the distance separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":456,"author":{"gitId":"AlWo223"},"content":" * @param datetimeIndex The position of the datetime separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":457,"author":{"gitId":"AlWo223"},"content":" * @param swimmingStyleIndex The position of the swimming style separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":458,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-22"},{"lineNumber":459,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":460,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingSwimArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":461,"author":{"gitId":"AlWo223"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":462,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":463,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":464,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":465,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":466,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":467,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":468,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":469,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input includes any empty arguments for creating an activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":470,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":471,"author":{"gitId":"AlWo223"},"content":" * @param caption The caption of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":472,"author":{"gitId":"AlWo223"},"content":" * @param duration The duration of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":473,"author":{"gitId":"AlWo223"},"content":" * @param distance The distance of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":474,"author":{"gitId":"AlWo223"},"content":" * @param datetime The datetime of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":475,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are empty.","lastModifiedDate":"2023-10-22"},{"lineNumber":476,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":477,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":478,"author":{"gitId":"nihalzp"},"content":" String datetime) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":479,"author":{"gitId":"AlWo223"},"content":" if (caption.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":480,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_CAPTION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":481,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":482,"author":{"gitId":"AlWo223"},"content":" if (duration.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":483,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":484,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":485,"author":{"gitId":"AlWo223"},"content":" if (distance.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":486,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":487,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":488,"author":{"gitId":"AlWo223"},"content":" if (datetime.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":489,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":490,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":491,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":492,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":493,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":494,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input includes any empty arguments for creating a cycle or run.","lastModifiedDate":"2023-10-22"},{"lineNumber":495,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":496,"author":{"gitId":"AlWo223"},"content":" * @param caption The caption of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":497,"author":{"gitId":"AlWo223"},"content":" * @param duration The duration of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":498,"author":{"gitId":"AlWo223"},"content":" * @param distance The distance of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":499,"author":{"gitId":"AlWo223"},"content":" * @param datetime The datetime of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":500,"author":{"gitId":"AlWo223"},"content":" * @param elevation The elevation of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":501,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are empty.","lastModifiedDate":"2023-10-22"},{"lineNumber":502,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":503,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":504,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-15"},{"lineNumber":505,"author":{"gitId":"AlWo223"},"content":" String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":506,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":507,"author":{"gitId":"AlWo223"},"content":" if (elevation.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":508,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":509,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":510,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":511,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":512,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":513,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input includes any empty arguments for creating a swim.","lastModifiedDate":"2023-10-22"},{"lineNumber":514,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":515,"author":{"gitId":"AlWo223"},"content":" * @param caption The caption of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":516,"author":{"gitId":"AlWo223"},"content":" * @param duration The duration of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":517,"author":{"gitId":"AlWo223"},"content":" * @param distance The distance of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":518,"author":{"gitId":"AlWo223"},"content":" * @param datetime The datetime of the activity.","lastModifiedDate":"2023-10-22"},{"lineNumber":519,"author":{"gitId":"AlWo223"},"content":" * @param swimmingStyleIndex The position of the swimming style separator.","lastModifiedDate":"2023-10-22"},{"lineNumber":520,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are empty.","lastModifiedDate":"2023-10-22"},{"lineNumber":521,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":522,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":523,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-25"},{"lineNumber":524,"author":{"gitId":"nihalzp"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":525,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":526,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":527,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":528,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":529,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":530,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":531,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":532,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a swim and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":533,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":534,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":535,"author":{"gitId":"AlWo223"},"content":" * @return activity An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":536,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-23"},{"lineNumber":537,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":538,"author":{"gitId":"AlWo223"},"content":" public static Activity parseSwim(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":539,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":540,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":541,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-23"},{"lineNumber":542,"author":{"gitId":"AlWo223"},"content":" final int swimmingStyleIndex \u003d arguments.indexOf(Parameter.SWIMMING_STYLE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":543,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":544,"author":{"gitId":"AlWo223"},"content":" checkMissingSwimArguments(durationIndex, distanceIndex, datetimeIndex, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":545,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":546,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":547,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":548,"author":{"gitId":"nihalzp"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":549,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":550,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":551,"author":{"gitId":"nihalzp"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":552,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":553,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":554,"author":{"gitId":"nihalzp"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), swimmingStyleIndex)","lastModifiedDate":"2023-10-25"},{"lineNumber":555,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":556,"author":{"gitId":"AlWo223"},"content":" final String swimmingStyle \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":557,"author":{"gitId":"AlWo223"},"content":" arguments.substring(swimmingStyleIndex + Parameter.SWIMMING_STYLE_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":558,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":559,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":560,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":561,"author":{"gitId":"AlWo223"},"content":" final LocalTime durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-24"},{"lineNumber":562,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":563,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":564,"author":{"gitId":"AlWo223"},"content":" final Swim.SwimmingStyle swimmingStyleParsed \u003d parseSwimmingStyle(swimmingStyle);","lastModifiedDate":"2023-10-13"},{"lineNumber":565,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":566,"author":{"gitId":"AlWo223"},"content":" return new Swim(caption, durationParsed, distanceParsed, datetimeParsed, swimmingStyleParsed);","lastModifiedDate":"2023-10-18"},{"lineNumber":567,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":568,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":569,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":570,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a swimming style and returns the corresponding swimming style object.","lastModifiedDate":"2023-10-22"},{"lineNumber":571,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":572,"author":{"gitId":"AlWo223"},"content":" * @param swimmingStyle The raw user input containing the swimming style.","lastModifiedDate":"2023-10-22"},{"lineNumber":573,"author":{"gitId":"AlWo223"},"content":" * @return swimmingStyle An object representing the swimming style.","lastModifiedDate":"2023-10-22"},{"lineNumber":574,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-22"},{"lineNumber":575,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":576,"author":{"gitId":"AlWo223"},"content":" public static Swim.SwimmingStyle parseSwimmingStyle(String swimmingStyle) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":577,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":578,"author":{"gitId":"AlWo223"},"content":" return Swim.SwimmingStyle.valueOf(swimmingStyle.toUpperCase());","lastModifiedDate":"2023-10-23"},{"lineNumber":579,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":580,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":581,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":582,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":583,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":584,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":585,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for adding an activity goal and returns the corresponding activity goal object.","lastModifiedDate":"2023-10-27"},{"lineNumber":586,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-27"},{"lineNumber":587,"author":{"gitId":"AlWo223"},"content":" * @return activityGoal An object representing the activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":588,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":589,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":590,"author":{"gitId":"AlWo223"},"content":" public static ActivityGoal parseActivityGoal(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":591,"author":{"gitId":"AlWo223"},"content":" final int sportIndex \u003d commandArgs.indexOf(Parameter.SPORT_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":592,"author":{"gitId":"AlWo223"},"content":" final int typeIndex \u003d commandArgs.indexOf(Parameter.TYPE_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":593,"author":{"gitId":"AlWo223"},"content":" final int periodIndex \u003d commandArgs.indexOf(Parameter.PERIOD_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":594,"author":{"gitId":"AlWo223"},"content":" final int targetIndex \u003d commandArgs.indexOf(Parameter.TARGET_SEPARATOR);","lastModifiedDate":"2023-10-27"},{"lineNumber":595,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":596,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityGoalArguments(sportIndex, typeIndex, periodIndex, targetIndex);","lastModifiedDate":"2023-10-27"},{"lineNumber":597,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":598,"author":{"gitId":"AlWo223"},"content":" final String sport \u003d commandArgs.substring(sportIndex + Parameter.SPORT_SEPARATOR.length(), typeIndex).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":599,"author":{"gitId":"AlWo223"},"content":" final String type \u003d","lastModifiedDate":"2023-10-27"},{"lineNumber":600,"author":{"gitId":"AlWo223"},"content":" commandArgs.substring(typeIndex + Parameter.TYPE_SEPARATOR.length(), periodIndex).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":601,"author":{"gitId":"AlWo223"},"content":" final String period \u003d","lastModifiedDate":"2023-10-27"},{"lineNumber":602,"author":{"gitId":"AlWo223"},"content":" commandArgs.substring(periodIndex + Parameter.PERIOD_SEPARATOR.length(), targetIndex).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":603,"author":{"gitId":"AlWo223"},"content":" final String target \u003d commandArgs.substring(targetIndex + Parameter.TARGET_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":604,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":605,"author":{"gitId":"AlWo223"},"content":" final ActivityGoal.Sport sportParsed \u003d parseSport(sport);","lastModifiedDate":"2023-10-27"},{"lineNumber":606,"author":{"gitId":"AlWo223"},"content":" final ActivityGoal.GoalType typeParsed \u003d parseGoalType(type);","lastModifiedDate":"2023-10-27"},{"lineNumber":607,"author":{"gitId":"AlWo223"},"content":" final Goal.Timespan periodParsed \u003d parsePeriod(period);","lastModifiedDate":"2023-10-27"},{"lineNumber":608,"author":{"gitId":"AlWo223"},"content":" final int targetParsed \u003d parseTarget(target);","lastModifiedDate":"2023-10-27"},{"lineNumber":609,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":610,"author":{"gitId":"AlWo223"},"content":" return new ActivityGoal(periodParsed, typeParsed, sportParsed, targetParsed);","lastModifiedDate":"2023-10-27"},{"lineNumber":611,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":612,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":613,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":614,"author":{"gitId":"AlWo223"},"content":" * Parses the sport input provided by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":615,"author":{"gitId":"AlWo223"},"content":" * @param sport The raw user input containing the sport.","lastModifiedDate":"2023-10-27"},{"lineNumber":616,"author":{"gitId":"AlWo223"},"content":" * @return sportParsed The parsed Sport object.","lastModifiedDate":"2023-10-27"},{"lineNumber":617,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":618,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":619,"author":{"gitId":"AlWo223"},"content":" public static ActivityGoal.Sport parseSport(String sport) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":620,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":621,"author":{"gitId":"AlWo223"},"content":" return ActivityGoal.Sport.valueOf(sport.toUpperCase());","lastModifiedDate":"2023-10-27"},{"lineNumber":622,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":623,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SPORT_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":624,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":625,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":626,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":627,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":628,"author":{"gitId":"AlWo223"},"content":" * Parses the goal type input provided by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":629,"author":{"gitId":"AlWo223"},"content":" * @param type The raw user input containing the goal type.","lastModifiedDate":"2023-10-27"},{"lineNumber":630,"author":{"gitId":"AlWo223"},"content":" * @return goalParsed The parsed GoalType object.","lastModifiedDate":"2023-10-27"},{"lineNumber":631,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":632,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":633,"author":{"gitId":"AlWo223"},"content":" public static ActivityGoal.GoalType parseGoalType(String type) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":634,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":635,"author":{"gitId":"AlWo223"},"content":" return ActivityGoal.GoalType.valueOf(type.toUpperCase());","lastModifiedDate":"2023-10-27"},{"lineNumber":636,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":637,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_TYPE_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":638,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":639,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":640,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":641,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":642,"author":{"gitId":"AlWo223"},"content":" * Parses the period input provided by the user","lastModifiedDate":"2023-10-27"},{"lineNumber":643,"author":{"gitId":"AlWo223"},"content":" * @param period The raw user input containing the period.","lastModifiedDate":"2023-10-27"},{"lineNumber":644,"author":{"gitId":"AlWo223"},"content":" * @return periodParsed The parsed Period object.","lastModifiedDate":"2023-10-27"},{"lineNumber":645,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":646,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":647,"author":{"gitId":"AlWo223"},"content":" public static Goal.Timespan parsePeriod(String period) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":648,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":649,"author":{"gitId":"AlWo223"},"content":" return Goal.Timespan.valueOf(period.toUpperCase());","lastModifiedDate":"2023-10-27"},{"lineNumber":650,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":651,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_PERIOD_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":652,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":653,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":654,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":655,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":656,"author":{"gitId":"AlWo223"},"content":" * Parses the target input provided by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":657,"author":{"gitId":"AlWo223"},"content":" * @param target The raw user input containing the target value.","lastModifiedDate":"2023-10-27"},{"lineNumber":658,"author":{"gitId":"AlWo223"},"content":" * @return targetParsed The parsed Integer target value.","lastModifiedDate":"2023-10-27"},{"lineNumber":659,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not a positive number.","lastModifiedDate":"2023-10-27"},{"lineNumber":660,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":661,"author":{"gitId":"AlWo223"},"content":" public static int parseTarget(String target) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":662,"author":{"gitId":"AlWo223"},"content":" int targetParsed;","lastModifiedDate":"2023-10-27"},{"lineNumber":663,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":664,"author":{"gitId":"AlWo223"},"content":" targetParsed \u003d Integer.parseInt(target);","lastModifiedDate":"2023-10-27"},{"lineNumber":665,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":666,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_TARGET_INVALID);","lastModifiedDate":"2023-10-27"},{"lineNumber":667,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":668,"author":{"gitId":"AlWo223"},"content":" if (targetParsed \u003c 0) {","lastModifiedDate":"2023-10-27"},{"lineNumber":669,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_TARGET_NEGATIVE);","lastModifiedDate":"2023-10-27"},{"lineNumber":670,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":671,"author":{"gitId":"AlWo223"},"content":" return targetParsed;","lastModifiedDate":"2023-10-27"},{"lineNumber":672,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":673,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":674,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":675,"author":{"gitId":"AlWo223"},"content":" * Checks if the raw user input is missing any arguments for creating an activity goal.","lastModifiedDate":"2023-10-27"},{"lineNumber":676,"author":{"gitId":"AlWo223"},"content":" * @param sportIndex The position of the sport separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":677,"author":{"gitId":"AlWo223"},"content":" * @param targetIndex The position of the target separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":678,"author":{"gitId":"AlWo223"},"content":" * @param periodIndex The position of the period separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":679,"author":{"gitId":"AlWo223"},"content":" * @param valueIndex The position of the value separator.","lastModifiedDate":"2023-10-27"},{"lineNumber":680,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If any of the arguments are missing.","lastModifiedDate":"2023-10-27"},{"lineNumber":681,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":682,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingActivityGoalArguments(int sportIndex, int targetIndex, int periodIndex,","lastModifiedDate":"2023-10-27"},{"lineNumber":683,"author":{"gitId":"AlWo223"},"content":" int valueIndex) throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":684,"author":{"gitId":"AlWo223"},"content":" if (sportIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":685,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_SPORT_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":686,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":687,"author":{"gitId":"AlWo223"},"content":" if (targetIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":688,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_TARGET_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":689,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":690,"author":{"gitId":"AlWo223"},"content":" if (periodIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":691,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_PERIOD_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":692,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":693,"author":{"gitId":"AlWo223"},"content":" if (valueIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-27"},{"lineNumber":694,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITYGOAL_TARGET_MISSING);","lastModifiedDate":"2023-10-27"},{"lineNumber":695,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":696,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":697,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":698,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":699,"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":700,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":701,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":702,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the slee0 add command.","lastModifiedDate":"2023-10-16"},{"lineNumber":703,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":704,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":705,"author":{"gitId":"DaDevChia"},"content":" public static AddSleepCommand parseSleepAdd(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":706,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":707,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(Parameter.START_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":708,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(Parameter.END_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":709,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":710,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":711,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":712,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":713,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":714,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":715,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(startMarkerPos + Parameter.START_TIME_SEPARATOR.length(), endMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":716,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":717,"author":{"gitId":"nihalzp"},"content":" String endTimeStr \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":718,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(endMarkerPos + Parameter.END_TIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":719,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":720,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":721,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":722,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":723,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":724,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":725,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":726,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":727,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":728,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":729,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":730,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":731,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":732,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":733,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":734,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":735,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":736,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":737,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":738,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":739,"author":{"gitId":"DaDevChia"},"content":" return new AddSleepCommand(startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":740,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":741,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":742,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":743,"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":744,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":745,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":746,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep delete command.","lastModifiedDate":"2023-10-16"},{"lineNumber":747,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":748,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":749,"author":{"gitId":"DaDevChia"},"content":" public static DeleteSleepCommand parseSleepDelete(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":750,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":751,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":752,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":753,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":754,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":755,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":756,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":757,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":758,"author":{"gitId":"DaDevChia"},"content":" return new DeleteSleepCommand(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":759,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":760,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":761,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":762,"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":763,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":764,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":765,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep edit command.","lastModifiedDate":"2023-10-16"},{"lineNumber":766,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":767,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":768,"author":{"gitId":"DaDevChia"},"content":" public static EditSleepCommand parseSleepEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":769,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(Parameter.START_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":770,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(Parameter.END_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":771,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":772,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":773,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":774,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":775,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":776,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":777,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":778,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.substring(0, startMarkerPos).trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":779,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":780,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":781,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":782,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":783,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":784,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(startMarkerPos + Parameter.START_TIME_SEPARATOR.length(), endMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":785,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":786,"author":{"gitId":"nihalzp"},"content":" String endTimeStr \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":787,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(endMarkerPos + Parameter.END_TIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":788,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":789,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":790,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":791,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":792,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":793,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":794,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":795,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":796,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":797,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":798,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":799,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":800,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":801,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":802,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":803,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":804,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":805,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":806,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":807,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":808,"author":{"gitId":"DaDevChia"},"content":" return new EditSleepCommand(index, startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":809,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":810,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":811,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":812,"author":{"gitId":"yicheng-toh"},"content":" * @param commandArgs User provided data to create goals for the nutrients defined.","lastModifiedDate":"2023-10-15"},{"lineNumber":813,"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":814,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Invalid input by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":815,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":816,"author":{"gitId":"yicheng-toh"},"content":" public static ArrayList\u003cDietGoal\u003e parseDietGoalSetEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-16"},{"lineNumber":817,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.trim().isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":818,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INSUFFICIENT_INPUT);","lastModifiedDate":"2023-10-22"},{"lineNumber":819,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":820,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":821,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValues;","lastModifiedDate":"2023-10-15"},{"lineNumber":822,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.contains(\" \")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":823,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d commandArgs.split(\"\\\\s+\");","lastModifiedDate":"2023-10-15"},{"lineNumber":824,"author":{"gitId":"yicheng-toh"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":825,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d new String[]{commandArgs};","lastModifiedDate":"2023-10-15"},{"lineNumber":826,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":827,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":828,"author":{"gitId":"yicheng-toh"},"content":" String nutrient;","lastModifiedDate":"2023-10-15"},{"lineNumber":829,"author":{"gitId":"yicheng-toh"},"content":" int targetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":830,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":831,"author":{"gitId":"yicheng-toh"},"content":" ArrayList\u003cDietGoal\u003e dietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":832,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e recordedNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":833,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":834,"author":{"gitId":"yicheng-toh"},"content":" for (int i \u003d 0; i \u003c nutrientAndTargetValues.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":835,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValue \u003d nutrientAndTargetValues[i].split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":836,"author":{"gitId":"yicheng-toh"},"content":" nutrient \u003d nutrientAndTargetValue[0];","lastModifiedDate":"2023-10-15"},{"lineNumber":837,"author":{"gitId":"yicheng-toh"},"content":" targetValue \u003d Integer.parseInt(nutrientAndTargetValue[1]);","lastModifiedDate":"2023-10-15"},{"lineNumber":838,"author":{"gitId":"yicheng-toh"},"content":" if (targetValue \u003d\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":839,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":840,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":841,"author":{"gitId":"yicheng-toh"},"content":" if (!NutrientVerifier.verify(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":842,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INVALID_NUTRIENT);","lastModifiedDate":"2023-10-15"},{"lineNumber":843,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":844,"author":{"gitId":"yicheng-toh"},"content":" if (recordedNutrients.contains(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":845,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSSAGE_DIETGOAL_REPEATED_NUTRIENT);","lastModifiedDate":"2023-10-22"},{"lineNumber":846,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":847,"author":{"gitId":"yicheng-toh"},"content":" DietGoal dietGoal \u003d new DietGoal(nutrient, targetValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":848,"author":{"gitId":"yicheng-toh"},"content":" dietGoals.add(dietGoal);","lastModifiedDate":"2023-10-15"},{"lineNumber":849,"author":{"gitId":"yicheng-toh"},"content":" recordedNutrients.add(nutrient);","lastModifiedDate":"2023-10-22"},{"lineNumber":850,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":851,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":852,"author":{"gitId":"yicheng-toh"},"content":" return dietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":853,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":854,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":855,"author":{"gitId":"yicheng-toh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":856,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INSUFFICIENT_INPUT);","lastModifiedDate":"2023-10-24"},{"lineNumber":857,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":858,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":859,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":860,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":861,"author":{"gitId":"yicheng-toh"},"content":" * @param deleteIndexString Index of the goal to be deleted in String format","lastModifiedDate":"2023-10-17"},{"lineNumber":862,"author":{"gitId":"yicheng-toh"},"content":" * @return Index of the goal in integer format in users\u0027 perspective.","lastModifiedDate":"2023-10-17"},{"lineNumber":863,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Catch invalid characters and numbers.","lastModifiedDate":"2023-10-17"},{"lineNumber":864,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":865,"author":{"gitId":"yicheng-toh"},"content":" public static int parseDietGoalDelete(String deleteIndexString) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":866,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":867,"author":{"gitId":"yicheng-toh"},"content":" int deleteIndex \u003d Integer.parseInt(deleteIndexString.trim());","lastModifiedDate":"2023-10-17"},{"lineNumber":868,"author":{"gitId":"yicheng-toh"},"content":" if (deleteIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":869,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":870,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":871,"author":{"gitId":"yicheng-toh"},"content":" return deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":872,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":873,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":874,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":875,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":876,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":877,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":878,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for a diet and returns the corresponding diet object.","lastModifiedDate":"2023-10-15"},{"lineNumber":879,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":880,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":881,"author":{"gitId":"nihalzp"},"content":" * @return An object representing the diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":882,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":883,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":884,"author":{"gitId":"nihalzp"},"content":" public static Diet parseDiet(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":885,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d commandArgs.indexOf(Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":886,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d commandArgs.indexOf(Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":887,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d commandArgs.indexOf(Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":888,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d commandArgs.indexOf(Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":889,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d commandArgs.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-25"},{"lineNumber":890,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":891,"author":{"gitId":"nihalzp"},"content":" checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos, fatMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":892,"author":{"gitId":"nihalzp"},"content":" datetimeMarkerPos);","lastModifiedDate":"2023-10-25"},{"lineNumber":893,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":894,"author":{"gitId":"nihalzp"},"content":" String calories \u003d commandArgs.substring(caloriesMarkerPos + Parameter.CALORIES_SEPARATOR.length(),","lastModifiedDate":"2023-10-25"},{"lineNumber":895,"author":{"gitId":"nihalzp"},"content":" proteinMarkerPos).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":896,"author":{"gitId":"nihalzp"},"content":" String protein \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":897,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(proteinMarkerPos + Parameter.PROTEIN_SEPARATOR.length(), carbMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":898,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":899,"author":{"gitId":"nihalzp"},"content":" String carb \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":900,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(carbMarkerPos + Parameter.CARB_SEPARATOR.length(), fatMarkerPos).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":901,"author":{"gitId":"nihalzp"},"content":" String fat \u003d commandArgs.substring(fatMarkerPos + Parameter.FAT_SEPARATOR.length(), datetimeMarkerPos)","lastModifiedDate":"2023-10-25"},{"lineNumber":902,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":903,"author":{"gitId":"nihalzp"},"content":" String datetime \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":904,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(datetimeMarkerPos + Parameter.DATETIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":905,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":906,"author":{"gitId":"nihalzp"},"content":" checkEmptyDietArguments(calories, protein, carb, fat, datetime);","lastModifiedDate":"2023-10-25"},{"lineNumber":907,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":908,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed \u003d parseCalories(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":909,"author":{"gitId":"nihalzp"},"content":" int proteinParsed \u003d parseProtein(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":910,"author":{"gitId":"nihalzp"},"content":" int carbParsed \u003d parseCarb(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":911,"author":{"gitId":"nihalzp"},"content":" int fatParsed \u003d parseFat(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":912,"author":{"gitId":"nihalzp"},"content":" LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-25"},{"lineNumber":913,"author":{"gitId":"nihalzp"},"content":" return new Diet(caloriesParsed, proteinParsed, carbParsed, fatParsed, datetimeParsed);","lastModifiedDate":"2023-10-25"},{"lineNumber":914,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":915,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":916,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":917,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet contains all the required arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":918,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":919,"author":{"gitId":"nihalzp"},"content":" * @param caloriesMarkerPos The position of the calories marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":920,"author":{"gitId":"nihalzp"},"content":" * @param proteinMarkerPos The position of the protein marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":921,"author":{"gitId":"nihalzp"},"content":" * @param carbMarkerPos The position of the carb marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":922,"author":{"gitId":"nihalzp"},"content":" * @param fatMarkerPos The position of the fat marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":923,"author":{"gitId":"nihalzp"},"content":" * @param datetimeMarkerPos The position of the datetime marker.","lastModifiedDate":"2023-10-25"},{"lineNumber":924,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":925,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":926,"author":{"gitId":"nihalzp"},"content":" public static void checkMissingDietArguments(int caloriesMarkerPos, int proteinMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":927,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos, int fatMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":928,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":929,"author":{"gitId":"nihalzp"},"content":" if (caloriesMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":930,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":931,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":932,"author":{"gitId":"nihalzp"},"content":" if (proteinMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":933,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":934,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":935,"author":{"gitId":"nihalzp"},"content":" if (carbMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":936,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":937,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":938,"author":{"gitId":"nihalzp"},"content":" if (fatMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":939,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":940,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":941,"author":{"gitId":"nihalzp"},"content":" if (datetimeMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-25"},{"lineNumber":942,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_DATETIME_MISSING);","lastModifiedDate":"2023-10-25"},{"lineNumber":943,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":944,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":945,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":946,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":947,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":948,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":949,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":950,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":951,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":952,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":953,"author":{"gitId":"nihalzp"},"content":" * @param datetime The datetime input.","lastModifiedDate":"2023-10-25"},{"lineNumber":954,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":955,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":956,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyDietArguments(String calories, String protein, String carb, String fat,","lastModifiedDate":"2023-10-25"},{"lineNumber":957,"author":{"gitId":"nihalzp"},"content":" String datetime) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":958,"author":{"gitId":"nihalzp"},"content":" if (calories.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":959,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":960,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":961,"author":{"gitId":"nihalzp"},"content":" if (protein.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":962,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":963,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":964,"author":{"gitId":"nihalzp"},"content":" if (carb.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":965,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":966,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":967,"author":{"gitId":"nihalzp"},"content":" if (fat.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":968,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":969,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":970,"author":{"gitId":"nihalzp"},"content":" if (datetime.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":971,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_DATETIME_EMPTY);","lastModifiedDate":"2023-10-25"},{"lineNumber":972,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":973,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":974,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":975,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":976,"author":{"gitId":"nihalzp"},"content":" * Parses the calories input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":977,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":978,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":979,"author":{"gitId":"nihalzp"},"content":" * @return The parsed calories.","lastModifiedDate":"2023-10-15"},{"lineNumber":980,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":981,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":982,"author":{"gitId":"nihalzp"},"content":" public static int parseCalories(String calories) throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":983,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":984,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":985,"author":{"gitId":"nihalzp"},"content":" caloriesParsed \u003d Integer.parseInt(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":986,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":987,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":988,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":989,"author":{"gitId":"nihalzp"},"content":" if (caloriesParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":990,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":991,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":992,"author":{"gitId":"nihalzp"},"content":" return caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":993,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":994,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":995,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":996,"author":{"gitId":"nihalzp"},"content":" * Parses the protein input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":997,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":998,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":999,"author":{"gitId":"nihalzp"},"content":" * @return The parsed protein.","lastModifiedDate":"2023-10-15"},{"lineNumber":1000,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":1001,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1002,"author":{"gitId":"nihalzp"},"content":" public static int parseProtein(String protein) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1003,"author":{"gitId":"nihalzp"},"content":" int proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1004,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1005,"author":{"gitId":"nihalzp"},"content":" proteinParsed \u003d Integer.parseInt(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":1006,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1007,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1008,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1009,"author":{"gitId":"nihalzp"},"content":" if (proteinParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1010,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1011,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1012,"author":{"gitId":"nihalzp"},"content":" return proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1013,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1014,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":1015,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":1016,"author":{"gitId":"nihalzp"},"content":" * Parses the carb input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":1017,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":1018,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":1019,"author":{"gitId":"nihalzp"},"content":" * @return The parsed carb.","lastModifiedDate":"2023-10-15"},{"lineNumber":1020,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":1021,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1022,"author":{"gitId":"nihalzp"},"content":" public static int parseCarb(String carb) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1023,"author":{"gitId":"nihalzp"},"content":" int carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1024,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1025,"author":{"gitId":"nihalzp"},"content":" carbParsed \u003d Integer.parseInt(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":1026,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1027,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1028,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1029,"author":{"gitId":"nihalzp"},"content":" if (carbParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1030,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1031,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1032,"author":{"gitId":"nihalzp"},"content":" return carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1033,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1034,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":1035,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":1036,"author":{"gitId":"nihalzp"},"content":" * Parses the fat input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":1037,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":1038,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":1039,"author":{"gitId":"nihalzp"},"content":" * @return The parsed fat.","lastModifiedDate":"2023-10-15"},{"lineNumber":1040,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":1041,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1042,"author":{"gitId":"nihalzp"},"content":" public static int parseFat(String fat) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1043,"author":{"gitId":"nihalzp"},"content":" int fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1044,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1045,"author":{"gitId":"nihalzp"},"content":" fatParsed \u003d Integer.parseInt(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":1046,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1047,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1048,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1049,"author":{"gitId":"nihalzp"},"content":" if (fatParsed \u003c 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1050,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1051,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1052,"author":{"gitId":"nihalzp"},"content":" return fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":1053,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1054,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":1055,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":1056,"author":{"gitId":"nihalzp"},"content":" * Parses the index of a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":1057,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":1058,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":1059,"author":{"gitId":"nihalzp"},"content":" * @return The parsed index.","lastModifiedDate":"2023-10-15"},{"lineNumber":1060,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":1061,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":1062,"author":{"gitId":"nihalzp"},"content":" public static int parseDietIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":1063,"author":{"gitId":"nihalzp"},"content":" if (commandArgs \u003d\u003d null || commandArgs.trim().isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1064,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-26"},{"lineNumber":1065,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1066,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1067,"author":{"gitId":"nihalzp"},"content":" String[] words \u003d commandArgs.trim().split(\"\\\\s+\", 2); // Split into parts","lastModifiedDate":"2023-10-26"},{"lineNumber":1068,"author":{"gitId":"nihalzp"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":1069,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":1070,"author":{"gitId":"nihalzp"},"content":" index \u003d Integer.parseInt(words[0]);","lastModifiedDate":"2023-10-26"},{"lineNumber":1071,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":1072,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":1073,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1074,"author":{"gitId":"nihalzp"},"content":" if (index \u003c 1) {","lastModifiedDate":"2023-10-25"},{"lineNumber":1075,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-25"},{"lineNumber":1076,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":1077,"author":{"gitId":"nihalzp"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":1078,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":1079,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1080,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":1081,"author":{"gitId":"nihalzp"},"content":" * Parses the value for a specific marker in a given argument string.","lastModifiedDate":"2023-10-26"},{"lineNumber":1082,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":1083,"author":{"gitId":"nihalzp"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-26"},{"lineNumber":1084,"author":{"gitId":"nihalzp"},"content":" * @param marker The marker whose value is to be retrieved.","lastModifiedDate":"2023-10-26"},{"lineNumber":1085,"author":{"gitId":"nihalzp"},"content":" * @return The value associated with the given marker, or an empty string if the marker is not found.","lastModifiedDate":"2023-10-26"},{"lineNumber":1086,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":1087,"author":{"gitId":"nihalzp"},"content":" public static String getValueForMarker(String arguments, String marker) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1088,"author":{"gitId":"nihalzp"},"content":" String patternString \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1089,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1090,"author":{"gitId":"nihalzp"},"content":" if (marker.equals(Parameter.DATETIME_SEPARATOR)) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1091,"author":{"gitId":"nihalzp"},"content":" // Special handling for datetime to capture the date and time","lastModifiedDate":"2023-10-26"},{"lineNumber":1092,"author":{"gitId":"nihalzp"},"content":" patternString \u003d marker + \"(\\\\d{4}-\\\\d{2}-\\\\d{2} \\\\d{2}:\\\\d{2})\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1093,"author":{"gitId":"nihalzp"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":1094,"author":{"gitId":"nihalzp"},"content":" // For other markers, capture a sequence of non-whitespace characters","lastModifiedDate":"2023-10-26"},{"lineNumber":1095,"author":{"gitId":"nihalzp"},"content":" patternString \u003d marker + \"(\\\\S+)\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1096,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1097,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1098,"author":{"gitId":"nihalzp"},"content":" Pattern pattern \u003d Pattern.compile(patternString);","lastModifiedDate":"2023-10-26"},{"lineNumber":1099,"author":{"gitId":"nihalzp"},"content":" Matcher matcher \u003d pattern.matcher(arguments);","lastModifiedDate":"2023-10-26"},{"lineNumber":1100,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1101,"author":{"gitId":"nihalzp"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1102,"author":{"gitId":"nihalzp"},"content":" return matcher.group(1);","lastModifiedDate":"2023-10-26"},{"lineNumber":1103,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1104,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1105,"author":{"gitId":"nihalzp"},"content":" // Return empty string if no match is found","lastModifiedDate":"2023-10-26"},{"lineNumber":1106,"author":{"gitId":"nihalzp"},"content":" return \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":1107,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1108,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":1109,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":1110,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for a sleep and returns the corresponding sleep object.","lastModifiedDate":"2023-10-26"},{"lineNumber":1111,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":1112,"author":{"gitId":"nihalzp"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-26"},{"lineNumber":1113,"author":{"gitId":"nihalzp"},"content":" * @return An object representing the sleep.","lastModifiedDate":"2023-10-26"},{"lineNumber":1114,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":1115,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":1116,"author":{"gitId":"nihalzp"},"content":" public static HashMap\u003cString, String\u003e parseDietEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":1117,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":1118,"author":{"gitId":"nihalzp"},"content":" String calories \u003d getValueForMarker(arguments, Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1119,"author":{"gitId":"nihalzp"},"content":" String protein \u003d getValueForMarker(arguments, Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1120,"author":{"gitId":"nihalzp"},"content":" String carb \u003d getValueForMarker(arguments, Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1121,"author":{"gitId":"nihalzp"},"content":" String fat \u003d getValueForMarker(arguments, Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1122,"author":{"gitId":"nihalzp"},"content":" String datetime \u003d getValueForMarker(arguments, Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":1123,"author":{"gitId":"nihalzp"},"content":" if (!calories.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1124,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed \u003d Integer.parseInt(calories);","lastModifiedDate":"2023-10-26"},{"lineNumber":1125,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, Integer.toString(caloriesParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1126,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1127,"author":{"gitId":"nihalzp"},"content":" if (!protein.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1128,"author":{"gitId":"nihalzp"},"content":" int proteinParsed \u003d Integer.parseInt(protein);","lastModifiedDate":"2023-10-26"},{"lineNumber":1129,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, Integer.toString(proteinParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1130,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1131,"author":{"gitId":"nihalzp"},"content":" if (!carb.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1132,"author":{"gitId":"nihalzp"},"content":" int carbParsed \u003d Integer.parseInt(carb);","lastModifiedDate":"2023-10-26"},{"lineNumber":1133,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, Integer.toString(carbParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1134,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1135,"author":{"gitId":"nihalzp"},"content":" if (!fat.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1136,"author":{"gitId":"nihalzp"},"content":" int fatParsed \u003d Integer.parseInt(fat);","lastModifiedDate":"2023-10-26"},{"lineNumber":1137,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, Integer.toString(fatParsed));","lastModifiedDate":"2023-10-26"},{"lineNumber":1138,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1139,"author":{"gitId":"nihalzp"},"content":" if (!datetime.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1140,"author":{"gitId":"nihalzp"},"content":" LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-26"},{"lineNumber":1141,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, datetimeParsed.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":1142,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1143,"author":{"gitId":"nihalzp"},"content":" if (dietMap.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":1144,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_NO_CHANGE_REQUESTED);","lastModifiedDate":"2023-10-26"},{"lineNumber":1145,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1146,"author":{"gitId":"nihalzp"},"content":" return dietMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":1147,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":1148,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":69,"DaDevChia":113,"AlWo223":523,"yicheng-toh":84,"nihalzp":359}},{"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 static Ui uiInstance;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * Constructs a \u003ccode\u003eUi\u003c/code\u003e object, whose input \u003ccode\u003ein\u003c/code\u003e","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * and output \u003ccode\u003eout\u003c/code\u003e is the standard input and the standard","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * output, respectively.","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" private Ui() {","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" this(System.in, System.out);","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":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"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":26,"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":27,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" * @param in The \u003ccode\u003eInputStream\u003c/code\u003e accepting the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" * @param out The \u003ccode\u003ePrintStream\u003c/code\u003e displaying the program\u0027s output.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" private Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" assert in !\u003d null : \"Input stream `in` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" assert out !\u003d null : \"Print stream `out` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" this.out \u003d out;","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":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" * Returns the singleton instance of `Ui`.","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" * @return The singleton instance of `Ui`.","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" public static Ui getInstance() {","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" if (uiInstance \u003d\u003d null) {","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" uiInstance \u003d new Ui();","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" return uiInstance;","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" * Returns the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" * @return The user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" out.print(Message.PROMPT);","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" return in.nextLine();","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" }","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":" * Shows the \u003ccode\u003emessages\u003c/code\u003e in a beautiful format.","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" * @param messages The messages to be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" public void showMessages(String... messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" assert messages !\u003d null : \"Messages should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" out.print(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" for (String message : messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" out.println(Message.PREFIX_MESSAGE + message);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" out.println(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" * Shows message for exception \u003ccode\u003ee\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" * @param e The exception whose message will be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" assert e !\u003d null : \"Exception `e` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" showMessages(Message.PREFIX_EXCEPTION + e.getMessage());","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" public void showWelcome() {","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" showMessages(Message.MESSAGE_HELLO);","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":90}},{"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":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"class AddActivityCommandTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private AddActivityCommand addActivityCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" void execute_addsActivity_returnsConfirmationMessage() {","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this activity:\", run.toString(), \"You have tracked a total of 2 \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" \"activities. Keep pushing!\"};","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" void execute_addsFirstActivity_returnsFirstActivityMessage() {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"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":47,"author":{"gitId":"AlWo223"},"content":" \"first activity. This is just the beginning!\"};","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d addActivityCommand.execute(data);","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":54}},{"path":"src/test/java/athleticli/commands/activity/DeleteActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"class DeleteActivityCommandTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private DeleteActivityCommand deleteActivityCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" AddActivityCommand addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" void execute_validIndex_activityDeleted() throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Gotcha, I\u0027ve deleted this activity:\", run.toString(), \"You have tracked a total of 0 \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" \"activities. Keep pushing!\"};","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" deleteActivityCommand \u003d new DeleteActivityCommand(1);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d deleteActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" void execute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" deleteActivityCommand \u003d new DeleteActivityCommand(0);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e deleteActivityCommand.execute(data));","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"AlWo223":50}},{"path":"src/test/java/athleticli/commands/activity/EditActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"class EditActivityCommandTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private AddActivityCommand addActivityCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" addActivityCommand \u003d new AddActivityCommand(activity);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, 60);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" void execute_validIndex_activityEdited() throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" EditActivityCommand editActivityCommand \u003d new EditActivityCommand(run, 1);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" editActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this activity:\", run.toString(), \"You have tracked a total of 1 \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" \"activities. Keep pushing!\"};","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d editActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" assertEquals(run, data.getActivities().get(0));","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" void execute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" EditActivityCommand editActivityCommand \u003d new EditActivityCommand(run, 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e editActivityCommand.execute(data));","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"AlWo223":52}},{"path":"src/test/java/athleticli/commands/activity/ListActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"class ListActivityCommandTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" AddActivityCommand addActivityCommand \u003d new AddActivityCommand(activity);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" // execute twice for 2 activities","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" void execute_detailedFalse_printsShortList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(false);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"These are the activities you have tracked so far:\", \"1.\" + new Activity(CAPTION, DURATION,","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DATE), \"2.\" + new Activity(CAPTION, DURATION, DISTANCE, DATE)};","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" void execute_detailedTrue_printsDetailedList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(true);","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d listActivityCommand.printDetailedList(activities, activities.size());","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" void printList_validInput() {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(false);","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.printList(activities, activities.size());","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"These are the activities you have tracked so far:\", \"1.\" + new Activity(CAPTION, DURATION,","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DATE), \"2.\" + new Activity(CAPTION, DURATION, DISTANCE, DATE)};","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" void printDetailedList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" ListActivityCommand listActivityCommand \u003d new ListActivityCommand(true);","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d listActivityCommand.printDetailedList(activities, activities.size());","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"These are the activities you have tracked so far:\", new Activity(CAPTION, DURATION,","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" DISTANCE, DATE).toDetailedString(),","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" new Activity(CAPTION, DURATION, DISTANCE, DATE).toDetailedString()};","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"AlWo223":77}},{"path":"src/test/java/athleticli/commands/activity/SetActivityGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"class SetActivityGoalCommandTest {","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private SetActivityGoalCommand setActivityGoalCommand;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private ActivityGoal activityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" ActivityGoal.GoalType goalType \u003d ActivityGoal.GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" ActivityGoal.Sport sport \u003d ActivityGoal.Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" Timespan period \u003d Timespan.WEEKLY;","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, 10000);","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" setActivityGoalCommand \u003d new SetActivityGoalCommand(activityGoal);","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String caption \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" int distance \u003d 3000;","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" Run run \u003d new Run(caption, duration, distance, LocalDateTime.now(), 0);","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" AddActivityCommand addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" addActivityCommand.execute(data);","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" void execute() {","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d setActivityGoalCommand.execute(data);","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Alright, I\u0027ve added this activity goal:\", activityGoal.toString(data)};","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"AlWo223":50}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","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":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" * Tests the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"public class AddDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private AddDietCommand addDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" addDietCommand \u003d new AddDietCommand(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your \" + \"first diet. This is just the beginning!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d addDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","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":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":42}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Tests the delete diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"public class DeleteDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" private DeleteDietCommand deleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" void execute() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Noted. I\u0027ve removed this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 0 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d deleteDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" void execute_invalidIndex_expectException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(2);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietCommand.execute(data));","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":50}},{"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":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromFilledDietGoalList_expectCorrectMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" System.out.println(data.getDietGoals());","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"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":39,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\",};","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" }","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":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromEmptyDietGoalList_expectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(100);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" void execute_integerExceedListSize_expectAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(100);","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" fail();","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yicheng-toh":63}},{"path":"src/test/java/athleticli/commands/diet/EditDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Parameter;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"/*","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Contains the tests for EditDietCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"public class EditDietCommandTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 10;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 20;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 30;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" private static final int INDEX \u003d 1;","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEdited() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, 30, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoCaloriesGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(CALORIES, 20, 30, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoProteinGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, PROTEIN, 30, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoCarbGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, CARB, 40, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoFatGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, 30, FAT, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoCaloriesProteinCarbFatGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, LocalDateTime.of(2021, 10, 10, 23, 21));","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" void execute_validIndex_dietEditedNoDateTimeGiven() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":" Diet newDiet \u003d new Diet(200, 20, 30, 40, DATE_TIME);","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(INDEX, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":" editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Ok, I\u0027ve updated this diet:\", newDiet.toString()};","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d editDietCommand.execute(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" void execute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e dietMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CALORIES_SEPARATOR, \"200\");","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.PROTEIN_SEPARATOR, \"20\");","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.CARB_SEPARATOR, \"30\");","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.FAT_SEPARATOR, \"40\");","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":" dietMap.put(Parameter.DATETIME_SEPARATOR, \"2021-10-10 23:21\");","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":" EditDietCommand editDietCommand \u003d new EditDietCommand(2, dietMap);","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e editDietCommand.execute(data));","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"nihalzp":150}},{"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.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"class EditDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e emptyInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledChangedInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalCarb;","lastModifiedDate":"2023-10-23"},{"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":" dietGoalCarb \u003d new DietGoal(\"carb\", 10000);","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" newDietGoalFats \u003d new DietGoal(\"fats\", 10);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" emptyInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalCarb);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals.add(newDietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"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":46,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d editDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" void execute_changeOneExistingInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledChangedInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10)\\n\\n\" + \"\\t2. carb intake progress: (0/10000)\\n\", \"Now you have 2 diet goal(s).\"};","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":73}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","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 list 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 ListDietCommandTest {","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 static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private ListDietCommand listDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" listDietCommand \u003d new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Here are the diets in your list:\", \"1. \" + diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 1 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d listDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","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":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":42}},{"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.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 SetDietGoalCommandTest {","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 DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalCarb;","lastModifiedDate":"2023-10-23"},{"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":" dietGoalCarb \u003d new DietGoal(\"carb\", 10000);","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalCarb);","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"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":40,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" }","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":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\\n\" + \"\\t2. carb intake progress: (0/10000)\\n\", \"Now you have 2 diet goal(s).\"};","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneExistingInputDietGoal_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","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":" assertThrows(AthletiException.class, () -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":70}},{"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/ActivityGoalTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import static athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static athleticli.data.activity.ActivityGoal.GoalType;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"import static athleticli.data.activity.ActivityGoal.Sport;","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"class ActivityGoalTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private ActivityList activityList;","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private ActivityGoal activityGoal;","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private Timespan period \u003d Timespan.WEEKLY;","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" private final LocalDate date \u003d LocalDate.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" private final String caption \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" private final int distance \u003d 3000;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" void isAchieved_activityDistanceGoal_true() {","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" int targetValue \u003d 8000;","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.GENERAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" LocalDateTime date \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(caption, duration, distance, date);","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" ActivityList activityList \u003d data.getActivities();","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" boolean expected \u003d true;","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" boolean actual \u003d activityGoal.isAchieved(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" void isAchieved_runGoalWithNoTrackedRun_false() {","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" int targetValue \u003d 8000;","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" LocalDateTime date \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" Activity activity \u003d new Activity(caption, duration, distance, date);","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" ActivityList activityList \u003d data.getActivities();","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" activityList.add(activity);","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" boolean expected \u003d false;","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" boolean actual \u003d activityGoal.isAchieved(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" void isAchieved_goalAchievedOutsidePeriod_false() {","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" int targetValue \u003d 120;","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DURATION;","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.GENERAL;","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, targetValue);","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateWithinPeriod \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateOutsidePeriod \u003d LocalDateTime.now().minusDays(15);","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" Activity activityWithinPeriod \u003d new Activity(caption, duration, distance, dateWithinPeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" Activity activityOutsidePeriod \u003d new Activity(caption, duration, distance, dateOutsidePeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" ActivityList activityList \u003d data.getActivities();","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" activityList.add(activityWithinPeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" activityList.add(activityOutsidePeriod);","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" boolean expected \u003d false;","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":" boolean actual \u003d activityGoal.isAchieved(data);","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" void getActivityClass() {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" GoalType goalType \u003d GoalType.DURATION;","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" Sport sport \u003d Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" activityGoal \u003d new ActivityGoal(period, goalType, sport, 0);","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" Class\u003c?\u003e expected \u003d Run.class;","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" Class\u003c?\u003e actual \u003d activityGoal.getActivityClass();","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"AlWo223":106}},{"path":"src/test/java/athleticli/data/activity/ActivityListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"class ActivityListTest {","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private ActivityList activityList;","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private Activity activityFirst;","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private Activity activitySecond;","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" activityList \u003d new ActivityList();","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateSecond \u003d LocalDateTime.now();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" LocalDateTime dateFirst \u003d LocalDateTime.now().minusDays(1);","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" activityFirst \u003d new Activity(CAPTION, DURATION, DISTANCE, dateFirst);","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" activitySecond \u003d new Activity(CAPTION, DURATION, DISTANCE, dateSecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" activityList.add(activityFirst);","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" activityList.add(activitySecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" void find() {","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.find(LocalDate.now()).get(0), activitySecond);","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.find(LocalDate.now().minusDays(1)).get(0), activityFirst);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" void sort() {","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" activityList.sort();","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.get(0), activitySecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" assertEquals(activityList.get(1), activityFirst);","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" void filterByTimespan() {","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" activityList.sort();","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" ArrayList\u003cActivity\u003e filteredList \u003d activityList.filterByTimespan(Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.get(0), activitySecond);","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.get(1), activityFirst);","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" filteredList \u003d activityList.filterByTimespan(Timespan.DAILY);","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.get(0), activitySecond);","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" assertEquals(filteredList.size(), 1);","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" void getTotalDistance_activity_totalDistance() {","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 2 * DISTANCE;","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDistance(Activity.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" void getTotalDistance_run_zero() {","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDistance(Run.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" void getTotalDuration_activity_totalTime() {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 2 * DURATION.toSecondOfDay();","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDuration(Activity.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" void getTotalDuration_run_zero() {","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" int actual \u003d activityList.getTotalDuration(Run.class, Timespan.WEEKLY);","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"AlWo223":86}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class ActivityTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-24"},{"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 Activity activity;","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":" activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","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 testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, activity.getCaption());","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, activity.getMovingTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, activity.getDistance());","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, activity.getStartDateTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Activity] Sunday \u003d Runday | Distance: 18.12 km | Time: 1h 24m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, activity.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Activity - Sunday \u003d Runday - October 10, 2023 at 11:21 PM]\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" \"\\tDistance: 18.12 km Time: 1h 24m\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" \"\\tCalories: 0 kcal ...\";","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" public void generateDistanceStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateDistanceStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Distance: 18.12 km\";","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public void generateMovingTimeStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Time: 01:24:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" public void generateStartDateTimeStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" public void formatTwoColumns() {","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.formatTwoColumns(\"Distance: 18.12 km\", \"Time: 1h 24m\", 30);","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Distance: 18.12 km Time: 1h 24m\";","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" void generateShortMovingTimeStringOutput_hoursNotZero() {","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Time: 1h 24m\";","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateShortMovingTimeStringOutput();","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" void generateShortMovingTimeStringOutput_hoursZero() {","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" activity \u003d new Activity(CAPTION, LocalTime.of(0, 24, 20), DISTANCE, DATE);","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"Time: 24m 20s\";","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" String actual \u003d activity.generateShortMovingTimeStringOutput();","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":92}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class CycleTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Cycling in the afternoon\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(2, 13);","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 40460;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 101;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 7, 14, 0);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Cycle cycle;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" cycle \u003d new Cycle(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","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":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, cycle.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, cycle.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, cycle.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, cycle.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" assertEquals(ELEVATION, cycle.getElevationGain());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double expected \u003d 18.25;","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" double actual \u003d cycle.calculateAverageSpeed();","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual, 0.005);","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":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"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-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" \" | \"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" + \"October 7, 2023 at 2:00 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, cycle.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Cycle - Cycling in the afternoon - October 7, 2023 at 2:00 PM]\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" + \"\\tDistance: 40.46 km Elevation Gain: 101 m\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" + \"\\tTime: 2h 13m Avg Speed: 18.25 km/h\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" + \"\\tCalories: 0 kcal Max Speed: tbd\";","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" String actual \u003d cycle.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" public void generateSpeedStringOutput() {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" String actual \u003d cycle.generateSpeedStringOutput();","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"18.25 km/h\";","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":68}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class RunTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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 LocalTime DURATION \u003d LocalTime.of(1, 24);","lastModifiedDate":"2023-10-24"},{"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,","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, run.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, run.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, run.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, run.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" assertEquals(ELEVATION, run.getElevationGain());","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" public void calculateAveragePace() {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" double averagePace \u003d run.calculateAveragePace();","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" assertEquals(4.64, averagePace, 0.005);","lastModifiedDate":"2023-10-24"},{"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":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" public void convertAveragePaceToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"4:38\";","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" String actual \u003d run.convertAveragePaceToString();","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Run] Night Run | Distance: 18.12 km | Pace: 4:38 /km | Time: 1h 24m | \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, run.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Run - Night Run - October 10, 2023 at 11:21 PM]\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" + \"\\tDistance: 18.12 km Avg Pace: 4:41 /km\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" + \"\\tMoving Time: Time: 1h 25m Elevation Gain: 60 m\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" + \"\\tCalories: 0 kcal Steps: 0\";","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" String actual \u003d run.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":66}},{"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.Disabled;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"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":"public class SwimTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Afternoon Swim\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalTime DURATION \u003d LocalTime.of(0, 35);","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 8, 29, 9, 45);","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final Swim.SwimmingStyle STYLE \u003d Swim.SwimmingStyle.BUTTERFLY;","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Swim swim;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" swim \u003d new Swim(CAPTION, DURATION, DISTANCE, DATE, STYLE);","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":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" public void testConstructorAndGetters() {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, swim.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, swim.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, swim.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, swim.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" assertEquals(STYLE, swim.getStyle());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageLapTime() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" assertEquals(105, swim.calculateAverageLapTime());","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" public void calculateLaps() {","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" assertEquals(20, swim.calculateLaps());","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Swim] Afternoon Swim | Distance: 1.00 km | Avg Lap Time: 105s | Time: 35m 0s | \" +","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" \"August 29, 2023 at 9:45 AM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, swim.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" @Disabled // Github gradle check fails on this test","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" public void testToDetailedString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Swim - Afternoon Swim - August 29, 2023 at 9:45 AM]\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" + \"\\tDistance: 1.00 km Time: 0h 35m\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" + \"\\tLaps: 20 Style: BUTTERFLY\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" + \"\\tAvg Lap Time: 105 s Calories: 0 kcal\";","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String actual \u003d swim.toDetailedString();","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":64}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"public class DietListTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20000;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30000;","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40000;","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private DietList dietList;","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" dietList \u003d new DietList();","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" void add_addOneDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assertEquals(1, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void remove_removeExistingDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" void remove_removeFromZeroDiets_expectIndexOutOfRangeError() {","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","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":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" void get_addOneDiet_expectGetSameDiet() {","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" assertEquals(diet, dietList.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" void size_initializeArgs_expectZero() {","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" void size_addTenDiets_expectTen() {","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c 10; i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" void testToString_oneExistingDiet_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet, dietList.toString());","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" void testToString_twoExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1 + \"\\n2. \" + diet2, dietList.toString());","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" void testToString_zeroExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" void testToString_threeExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" Diet diet3 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet3);","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1 + \"\\n2. \" + diet2 + \"\\n3. \" + diet3,","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":101}},{"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 java.time.LocalDateTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"public class DietTest {","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 static final LocalDateTime DATE_TIME \u003d LocalDateTime.of(2020, 10, 10, 10, 10);","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT, DATE_TIME);","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" void getCalories_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" assertEquals(CALORIES, diet.getCalories());","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 setCalories_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" diet.setCalories(10);","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, diet.getCalories());","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" void getProtein_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" assertEquals(PROTEIN, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" void setProtein_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" diet.setProtein(20);","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" assertEquals(20, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" void getCarb_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertEquals(CARB, diet.getCarb());","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 setCarb_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" diet.setCarb(30);","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" assertEquals(30, diet.getCarb());","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":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" void getFat_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" assertEquals(FAT, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" void setFat_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" diet.setFat(40);","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" assertEquals(40, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" void getDateTime_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" assertEquals(DATE_TIME, diet.getDateTime());","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" void setDateTime_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" LocalDateTime newDateTime \u003d LocalDateTime.of(2020, 10, 10, 10, 11);","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" diet.setDateTime(newDateTime);","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" assertEquals(newDateTime, diet.getDateTime());","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" void toString_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" String expected \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" \"Calories: 10000 Protein: 20000 Carb: 30000 Fat: 40000 Date: October 10, 2020 at 10:10 AM\";","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, diet.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":86}},{"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":"yicheng-toh"},"content":"import athleticli.commands.diet.DeleteDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.EditDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.ListDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.SetDietGoalCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal;","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Swim;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal.GoalType;","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityGoal.Sport;","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Goal.Timespan;","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.checkEmptyDietArguments;","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.checkMissingDietArguments;","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.getValueForMarker;","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCalories;","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCarb;","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDate;","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDiet;","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDietEdit;","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"import static athleticli.ui.Parser.parseDietGoalDelete;","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":"import static athleticli.ui.Parser.parseDietGoalSetEdit;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseDietIndex;","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseFat;","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseProtein;","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.splitCommandWordAndArgs;","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":"class ParserTest {","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_noArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" final String commandWithNoArgs \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithNoArgs).length, 2);","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":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_multipleArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" final String commandWithMultipleArgs \u003d \"set-diet-goal calories/1 carb/3\";","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithMultipleArgs).length, 2);","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":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" void parseCommand_unknownCommand_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" final String unknownCommand \u003d \"hello\";","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(unknownCommand));","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" void parseCommand_byeCommand_expectByeCommand() throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" final String byeCommand \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" assertInstanceOf(ByeCommand.class, parseCommand(byeCommand));","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_expectAddSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"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":82,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(AddSleepCommand.class, parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":92,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingEndExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingBothExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/ end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_invalidDatetimeExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"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":106,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":108,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_expectEditSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"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":112,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(EditSleepCommand.class, parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":113,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":114,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":122,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingEndExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":123,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":124,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":125,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":126,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":127,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":128,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingBothExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":129,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/ end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":130,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":131,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":132,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":133,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":134,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_invalidDatetimeExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":135,"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":136,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":137,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":138,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":139,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":140,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"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":142,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":143,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":145,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":146,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_expectDeleteSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":147,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep 1\";","lastModifiedDate":"2023-10-14"},{"lineNumber":148,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(DeleteSleepCommand.class, parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":149,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":150,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":151,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep abc\";","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":158,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_listSleepCommand_expectListSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":159,"author":{"gitId":"DaDevChia"},"content":" final String listSleepCommandString \u003d \"list-sleep\";","lastModifiedDate":"2023-10-14"},{"lineNumber":160,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(ListSleepCommand.class, parseCommand(listSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":161,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_setDietGoalCommand_expectSetDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"yicheng-toh"},"content":" final String setDietGoalCommandString \u003d \"set-diet-goal calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(SetDietGoalCommand.class, parseCommand(setDietGoalCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":167,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":168,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_editDietCommand_expectEditDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"yicheng-toh"},"content":" final String editDietGoalCommandString \u003d \"edit-diet-goal calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(EditDietGoalCommand.class, parseCommand(editDietGoalCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":173,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":174,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":175,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":176,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_listDietGoalCommand_expectListDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":177,"author":{"gitId":"yicheng-toh"},"content":" final String listDietCommandString \u003d \"list-diet-goal\";","lastModifiedDate":"2023-10-23"},{"lineNumber":178,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(ListDietGoalCommand.class, parseCommand(listDietCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":180,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":181,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":182,"author":{"gitId":"yicheng-toh"},"content":" void parseCommand_deleteDietGoalCommand_expectDeleteDietGoalCommand() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":183,"author":{"gitId":"yicheng-toh"},"content":" final String deleteDietGoalCommandString \u003d \"delete-diet-goal 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":184,"author":{"gitId":"yicheng-toh"},"content":" assertInstanceOf(DeleteDietGoalCommand.class, parseCommand(deleteDietGoalCommandString));","lastModifiedDate":"2023-10-23"},{"lineNumber":185,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":186,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_expectAddDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(AddDietCommand.class, 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_deleteDietCommand_expectDeleteDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet 1\";","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(DeleteDietCommand.class, parseCommand(deleteDietCommandString));","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_listDietCommand_expectListDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"nihalzp"},"content":" final String listDietCommandString \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(ListDietCommand.class, parseCommand(listDietCommandString));","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_missingCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":208,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"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_missingProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":214,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"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_missingCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":220,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"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_addDietCommand_missingFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":226,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":227,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":228,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":229,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":230,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":231,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingDateTimeExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":232,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-25"},{"lineNumber":233,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":234,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":235,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":236,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":237,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":238,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":239,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/ protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":240,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":241,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":242,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":243,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":244,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":245,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":246,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/ carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":247,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":248,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":249,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":250,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":251,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":252,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":253,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/ fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":254,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":255,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":256,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":257,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":258,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":259,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":260,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/ datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":261,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":262,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":263,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":264,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":265,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyDateTimeExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":266,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/\";","lastModifiedDate":"2023-10-25"},{"lineNumber":267,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":268,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":269,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":270,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":271,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":272,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":273,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/abc protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":274,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":275,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":276,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":277,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":278,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":279,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":280,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/abc carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":281,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":282,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":283,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":284,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":285,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":286,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":287,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/abc fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":288,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":289,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":290,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":291,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":292,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":293,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":294,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/abc datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":295,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":296,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":297,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":298,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":299,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidDateTimeFormatExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":300,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString1 \u003d \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06\";","lastModifiedDate":"2023-10-25"},{"lineNumber":301,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString2 \u003d \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":302,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString3 \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":303,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/4 datetime/16-10-2023 10:00:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":304,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString1));","lastModifiedDate":"2023-10-25"},{"lineNumber":305,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString2));","lastModifiedDate":"2023-10-25"},{"lineNumber":306,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString3));","lastModifiedDate":"2023-10-25"},{"lineNumber":307,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":308,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":309,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":310,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":311,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":312,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/-1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":313,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":314,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":315,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":316,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":317,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeProteinExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":318,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":319,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/-2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":320,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":321,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":322,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":323,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":324,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeCarbExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":325,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":326,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/-3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":327,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-25"},{"lineNumber":328,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":329,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":330,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":331,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_negativeFatExpectAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":332,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":333,"author":{"gitId":"nihalzp"},"content":" \"add-diet calories/1 protein/2 carb/3 fat/-4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":334,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":335,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":336,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":337,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":338,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":339,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet abc\";","lastModifiedDate":"2023-10-15"},{"lineNumber":340,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":341,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":342,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":343,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":344,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_emptyIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":345,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":346,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":347,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":348,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":349,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":350,"author":{"gitId":"nihalzp"},"content":" void parseDietIndex_validIndex_returnIndex() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":351,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":352,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseDietIndex(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":353,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":354,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":355,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":356,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":357,"author":{"gitId":"nihalzp"},"content":" void parseDietIndex_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":358,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":359,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietIndex(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":360,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":361,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":362,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":363,"author":{"gitId":"nihalzp"},"content":" void parseDietIndex_nonPositiveIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":364,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"0\";","lastModifiedDate":"2023-10-25"},{"lineNumber":365,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietIndex(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":366,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":367,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":368,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":369,"author":{"gitId":"nihalzp"},"content":" void parseDiet_emptyInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":370,"author":{"gitId":"nihalzp"},"content":" String emptyInput \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":371,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDiet(emptyInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":372,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":373,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":374,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":375,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingCalories_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":376,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":377,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":378,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":379,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":380,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":381,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":382,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":383,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":384,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":385,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":386,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":387,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingProtein_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":388,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":389,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":390,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":391,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":392,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":393,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":394,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":395,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":396,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":397,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":398,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":399,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingCarb_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":400,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":401,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":402,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":403,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":404,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":405,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":406,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":407,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":408,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":409,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":410,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":411,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingFat_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":412,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":413,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":414,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":415,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":416,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":417,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":418,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":419,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":420,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":421,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":422,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":423,"author":{"gitId":"nihalzp"},"content":" void checkMissingDietArguments_missingDatetime_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":424,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":425,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d 2;","lastModifiedDate":"2023-10-25"},{"lineNumber":426,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d 3;","lastModifiedDate":"2023-10-25"},{"lineNumber":427,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d 4;","lastModifiedDate":"2023-10-25"},{"lineNumber":428,"author":{"gitId":"nihalzp"},"content":" int datetimeMarkerPos \u003d -1;","lastModifiedDate":"2023-10-25"},{"lineNumber":429,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":430,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos,","lastModifiedDate":"2023-10-25"},{"lineNumber":431,"author":{"gitId":"nihalzp"},"content":" fatMarkerPos, datetimeMarkerPos));","lastModifiedDate":"2023-10-25"},{"lineNumber":432,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":433,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":434,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":435,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":436,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyCalories_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":437,"author":{"gitId":"nihalzp"},"content":" String emptyCalories \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":438,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":439,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":440,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":441,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":442,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":443,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(emptyCalories, nonEmptyProtein, nonEmptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":444,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":445,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":446,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":447,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":448,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyProtein_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":449,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":450,"author":{"gitId":"nihalzp"},"content":" String emptyProtein \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":451,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":452,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":453,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":454,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":455,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, emptyProtein, nonEmptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":456,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":457,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":458,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":459,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":460,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyCarb_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":461,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":462,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":463,"author":{"gitId":"nihalzp"},"content":" String emptyCarb \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":464,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":465,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":466,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":467,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, nonEmptyProtein, emptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":468,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":469,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":470,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":471,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":472,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyFat_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":473,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":474,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":475,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":476,"author":{"gitId":"nihalzp"},"content":" String emptyFat \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":477,"author":{"gitId":"nihalzp"},"content":" String nonEmptyDatetime \u003d \"2021-10-06 10:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":478,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":479,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, nonEmptyProtein, nonEmptyCarb, emptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":480,"author":{"gitId":"nihalzp"},"content":" nonEmptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":481,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":482,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":483,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":484,"author":{"gitId":"nihalzp"},"content":" void checkEmptyDietArguments_emptyDatetime_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":485,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCalories \u003d \"1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":486,"author":{"gitId":"nihalzp"},"content":" String nonEmptyProtein \u003d \"2\";","lastModifiedDate":"2023-10-25"},{"lineNumber":487,"author":{"gitId":"nihalzp"},"content":" String nonEmptyCarb \u003d \"3\";","lastModifiedDate":"2023-10-25"},{"lineNumber":488,"author":{"gitId":"nihalzp"},"content":" String nonEmptyFat \u003d \"4\";","lastModifiedDate":"2023-10-25"},{"lineNumber":489,"author":{"gitId":"nihalzp"},"content":" String emptyDatetime \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":490,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class,","lastModifiedDate":"2023-10-25"},{"lineNumber":491,"author":{"gitId":"nihalzp"},"content":" () -\u003e checkEmptyDietArguments(nonEmptyCalories, nonEmptyProtein, nonEmptyCarb, nonEmptyFat,","lastModifiedDate":"2023-10-25"},{"lineNumber":492,"author":{"gitId":"nihalzp"},"content":" emptyDatetime));","lastModifiedDate":"2023-10-25"},{"lineNumber":493,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":494,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":495,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":496,"author":{"gitId":"nihalzp"},"content":" void parseCalories_validCalories_returnCalories() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":497,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":498,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseCalories(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":499,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":500,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":501,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":502,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":503,"author":{"gitId":"nihalzp"},"content":" void parseCalories_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":504,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":505,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCalories(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":506,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":507,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":508,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":509,"author":{"gitId":"nihalzp"},"content":" void parseCalories_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":510,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":511,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCalories(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":512,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":513,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":514,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":515,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":516,"author":{"gitId":"nihalzp"},"content":" void parseProtein_validProtein_returnProtein() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":517,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":518,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseProtein(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":519,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":520,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":521,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":522,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":523,"author":{"gitId":"nihalzp"},"content":" void parseProtein_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":524,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":525,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseProtein(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":526,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":527,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":528,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":529,"author":{"gitId":"nihalzp"},"content":" void parseProtein_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":530,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":531,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseProtein(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":532,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":533,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":534,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":535,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":536,"author":{"gitId":"nihalzp"},"content":" void parseCarb_validCarb_returnCarb() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":537,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":538,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseCarb(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":539,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":540,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":541,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":542,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":543,"author":{"gitId":"nihalzp"},"content":" void parseCarb_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":544,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":545,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCarb(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":546,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":547,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":548,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":549,"author":{"gitId":"nihalzp"},"content":" void parseCarb_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":550,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":551,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCarb(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":552,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":553,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":554,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":555,"author":{"gitId":"nihalzp"},"content":" void parseFat_validFat_returnFat() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":556,"author":{"gitId":"nihalzp"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-25"},{"lineNumber":557,"author":{"gitId":"nihalzp"},"content":" int actual \u003d parseFat(\"5\");","lastModifiedDate":"2023-10-25"},{"lineNumber":558,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-25"},{"lineNumber":559,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":560,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":561,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":562,"author":{"gitId":"nihalzp"},"content":" void parseFat_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":563,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-25"},{"lineNumber":564,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseFat(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":565,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":566,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":567,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":568,"author":{"gitId":"nihalzp"},"content":" void parseFat_negativeIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":569,"author":{"gitId":"nihalzp"},"content":" String nonIntegerInput \u003d \"-1\";","lastModifiedDate":"2023-10-25"},{"lineNumber":570,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseFat(nonIntegerInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":571,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":572,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":573,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":574,"author":{"gitId":"nihalzp"},"content":" void getValueForMarker_validInput_returnValue() {","lastModifiedDate":"2023-10-26"},{"lineNumber":575,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2 calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":576,"author":{"gitId":"nihalzp"},"content":" String caloriesActual \u003d getValueForMarker(validInput, Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":577,"author":{"gitId":"nihalzp"},"content":" String proteinActual \u003d getValueForMarker(validInput, Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":578,"author":{"gitId":"nihalzp"},"content":" String carbActual \u003d getValueForMarker(validInput, Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":579,"author":{"gitId":"nihalzp"},"content":" String fatActual \u003d getValueForMarker(validInput, Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":580,"author":{"gitId":"nihalzp"},"content":" String datetimeActual \u003d getValueForMarker(validInput, Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":581,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1\", caloriesActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":582,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"2\", proteinActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":583,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"3\", carbActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":584,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"4\", fatActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":585,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"2023-10-06 10:00\", datetimeActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":586,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":587,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":588,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":589,"author":{"gitId":"nihalzp"},"content":" void getValueForMarker_invalidInput_returnEmptyString() {","lastModifiedDate":"2023-10-26"},{"lineNumber":590,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"2 calorie/1 proteins/2 carbs/3 fats/4 datetime/2023-10-06\";","lastModifiedDate":"2023-10-26"},{"lineNumber":591,"author":{"gitId":"nihalzp"},"content":" String caloriesActual \u003d getValueForMarker(invalidInput, Parameter.CALORIES_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":592,"author":{"gitId":"nihalzp"},"content":" String proteinActual \u003d getValueForMarker(invalidInput, Parameter.PROTEIN_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":593,"author":{"gitId":"nihalzp"},"content":" String carbActual \u003d getValueForMarker(invalidInput, Parameter.CARB_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":594,"author":{"gitId":"nihalzp"},"content":" String fatActual \u003d getValueForMarker(invalidInput, Parameter.FAT_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":595,"author":{"gitId":"nihalzp"},"content":" String datetimeActual \u003d getValueForMarker(invalidInput, Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-26"},{"lineNumber":596,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", caloriesActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":597,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", proteinActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":598,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", carbActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":599,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", fatActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":600,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", datetimeActual);","lastModifiedDate":"2023-10-26"},{"lineNumber":601,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":602,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":603,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":604,"author":{"gitId":"nihalzp"},"content":" void parseDietEdit_validInput_returnDietEdit() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":605,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2 calories/1 protein/2 carb/3 fat/4 datetime/2023-10-06 10:00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":606,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e actual \u003d parseDietEdit(validInput);","lastModifiedDate":"2023-10-26"},{"lineNumber":607,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e expected \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":608,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CALORIES_SEPARATOR, \"1\");","lastModifiedDate":"2023-10-26"},{"lineNumber":609,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.PROTEIN_SEPARATOR, \"2\");","lastModifiedDate":"2023-10-26"},{"lineNumber":610,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CARB_SEPARATOR, \"3\");","lastModifiedDate":"2023-10-26"},{"lineNumber":611,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.FAT_SEPARATOR, \"4\");","lastModifiedDate":"2023-10-26"},{"lineNumber":612,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.DATETIME_SEPARATOR, \"2023-10-06T10:00\");","lastModifiedDate":"2023-10-26"},{"lineNumber":613,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":614,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":615,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":616,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":617,"author":{"gitId":"nihalzp"},"content":" void parseDietEdit_someMarkersPresent_returnDietEdit() throws AthletiException {","lastModifiedDate":"2023-10-26"},{"lineNumber":618,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2 calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-26"},{"lineNumber":619,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e actual \u003d parseDietEdit(validInput);","lastModifiedDate":"2023-10-26"},{"lineNumber":620,"author":{"gitId":"nihalzp"},"content":" HashMap\u003cString, String\u003e expected \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":621,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CALORIES_SEPARATOR, \"1\");","lastModifiedDate":"2023-10-26"},{"lineNumber":622,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.PROTEIN_SEPARATOR, \"2\");","lastModifiedDate":"2023-10-26"},{"lineNumber":623,"author":{"gitId":"nihalzp"},"content":" expected.put(Parameter.CARB_SEPARATOR, \"3\");","lastModifiedDate":"2023-10-26"},{"lineNumber":624,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-26"},{"lineNumber":625,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":626,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":627,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":628,"author":{"gitId":"nihalzp"},"content":" void parseDietEdit_zeroValidInput_throwAthletiException() {","lastModifiedDate":"2023-10-26"},{"lineNumber":629,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"2 calorie/1 proteins/2 carbs/3 fats/4 datetime/2023-10-06\";","lastModifiedDate":"2023-10-26"},{"lineNumber":630,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietEdit(invalidInput));","lastModifiedDate":"2023-10-26"},{"lineNumber":631,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":632,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":633,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":634,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_noInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":635,"author":{"gitId":"yicheng-toh"},"content":" String oneValidOneInvalidGoalString \u003d \" \";","lastModifiedDate":"2023-10-23"},{"lineNumber":636,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(oneValidOneInvalidGoalString));","lastModifiedDate":"2023-10-23"},{"lineNumber":637,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":638,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":639,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":640,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_oneValidOneInvalidGoal_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":641,"author":{"gitId":"yicheng-toh"},"content":" String oneValidOneInvalidGoalString \u003d \"calories/60 protein/protine\";","lastModifiedDate":"2023-10-15"},{"lineNumber":642,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(oneValidOneInvalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":643,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":644,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":645,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":646,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_zeroTargetValue_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":647,"author":{"gitId":"yicheng-toh"},"content":" String zeroTargetValueGoalString \u003d \"calories/0\";","lastModifiedDate":"2023-10-15"},{"lineNumber":648,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(zeroTargetValueGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":649,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":650,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":651,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":652,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_oneInvalidGoal_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":653,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calories/caloreis protein/protein\";","lastModifiedDate":"2023-10-15"},{"lineNumber":654,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":655,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":656,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":657,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":658,"author":{"gitId":"AlWo223"},"content":" void parseActivityIndex_validIndex_returnIndex() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":659,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-23"},{"lineNumber":660,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseActivityIndex(\"5\");","lastModifiedDate":"2023-10-23"},{"lineNumber":661,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":662,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":663,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":664,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":665,"author":{"gitId":"AlWo223"},"content":" void parseActivityIndex_invalidIndex_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":666,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseActivityIndex(\"abc\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":667,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":668,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":669,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":670,"author":{"gitId":"AlWo223"},"content":" void parseActivityEdit_validInput_returnActivityEdit() {","lastModifiedDate":"2023-10-25"},{"lineNumber":671,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"1 Morning Run duration/01:00:00 distance/10000 datetime/2021-09-01 06:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":672,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseActivityEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":673,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":674,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":675,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":676,"author":{"gitId":"AlWo223"},"content":" void parseActivityEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":677,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":678,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseActivityEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":679,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":680,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":681,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":682,"author":{"gitId":"AlWo223"},"content":" void parseRunEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":683,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":684,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseRunEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":685,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":686,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":687,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":688,"author":{"gitId":"AlWo223"},"content":" void parseRunEdit_validInput_returnRunEdit() {","lastModifiedDate":"2023-10-23"},{"lineNumber":689,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":690,"author":{"gitId":"nihalzp"},"content":" \"2 Evening Ride duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 elevation/1000\";","lastModifiedDate":"2023-10-25"},{"lineNumber":691,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseRunEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":692,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":693,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":694,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":695,"author":{"gitId":"AlWo223"},"content":" void parseCycleEdit_validInput_returnRunEdit() {","lastModifiedDate":"2023-10-23"},{"lineNumber":696,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":697,"author":{"gitId":"nihalzp"},"content":" \"2 Evening Ride duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 elevation/1000\";","lastModifiedDate":"2023-10-25"},{"lineNumber":698,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseCycleEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":699,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":700,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":701,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":702,"author":{"gitId":"AlWo223"},"content":" void parseCycleEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":703,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":704,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseCycleEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":705,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":706,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":707,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":708,"author":{"gitId":"AlWo223"},"content":" void parseSwimEdit_validInput_noExceptionThrown() {","lastModifiedDate":"2023-10-25"},{"lineNumber":709,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":710,"author":{"gitId":"nihalzp"},"content":" \"2 Evening Ride duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 style/freestyle\";","lastModifiedDate":"2023-10-25"},{"lineNumber":711,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.parseSwimEdit(validInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":712,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":713,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":714,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":715,"author":{"gitId":"AlWo223"},"content":" void parseSwimEdit_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":716,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"1 Morning Run duration/60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":717,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseRunEdit(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":718,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":719,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":720,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":721,"author":{"gitId":"AlWo223"},"content":" void parseActivityEditIndex_validInput_returnIndex() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":722,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 5;","lastModifiedDate":"2023-10-23"},{"lineNumber":723,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseActivityEditIndex(\"5\");","lastModifiedDate":"2023-10-23"},{"lineNumber":724,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-23"},{"lineNumber":725,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":726,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":727,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":728,"author":{"gitId":"AlWo223"},"content":" void parseActivityListDetail_flagPresent_returnTrue() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":729,"author":{"gitId":"AlWo223"},"content":" String input \u003d \"list-activity -d\";","lastModifiedDate":"2023-10-23"},{"lineNumber":730,"author":{"gitId":"AlWo223"},"content":" assertTrue(Parser.parseActivityListDetail(input));","lastModifiedDate":"2023-10-23"},{"lineNumber":731,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":732,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":733,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":734,"author":{"gitId":"AlWo223"},"content":" void parseActivityListDetail_flagAbsent_returnFalse() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":735,"author":{"gitId":"AlWo223"},"content":" String input \u003d \"list-activity\";","lastModifiedDate":"2023-10-23"},{"lineNumber":736,"author":{"gitId":"AlWo223"},"content":" assertFalse(Parser.parseActivityListDetail(input));","lastModifiedDate":"2023-10-23"},{"lineNumber":737,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":738,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":739,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":740,"author":{"gitId":"AlWo223"},"content":" void parseActivity_validInput_activityParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":741,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"Morning Run duration/01:00:00 distance/10000 datetime/2021-09-01 06:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":742,"author":{"gitId":"AlWo223"},"content":" Activity actual \u003d Parser.parseActivity(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":743,"author":{"gitId":"AlWo223"},"content":" LocalTime duration \u003d LocalTime.parse(\"01:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":744,"author":{"gitId":"nihalzp"},"content":" LocalDateTime time \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":745,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 06:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":746,"author":{"gitId":"AlWo223"},"content":" Activity expected \u003d new Activity(\"Morning Run\", duration, 10000, time);","lastModifiedDate":"2023-10-25"},{"lineNumber":747,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getCaption(), expected.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":748,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getMovingTime(), expected.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":749,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getDistance(), expected.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":750,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStartDateTime(), expected.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":751,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":752,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":753,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":754,"author":{"gitId":"AlWo223"},"content":" void parseActivityGoal_validInput_activityGoalParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":755,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"sport/running type/distance period/weekly target/10000\";","lastModifiedDate":"2023-10-27"},{"lineNumber":756,"author":{"gitId":"AlWo223"},"content":" ActivityGoal actual \u003d Parser.parseActivityGoal(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":757,"author":{"gitId":"AlWo223"},"content":" ActivityGoal expected \u003d new ActivityGoal(Goal.Timespan.WEEKLY, ActivityGoal.GoalType.DISTANCE,","lastModifiedDate":"2023-10-27"},{"lineNumber":758,"author":{"gitId":"AlWo223"},"content":" ActivityGoal.Sport.RUNNING, 10000);","lastModifiedDate":"2023-10-27"},{"lineNumber":759,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getTimespan(), expected.getTimespan());","lastModifiedDate":"2023-10-27"},{"lineNumber":760,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getGoalType(), expected.getGoalType());","lastModifiedDate":"2023-10-27"},{"lineNumber":761,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getSport(), expected.getSport());","lastModifiedDate":"2023-10-27"},{"lineNumber":762,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getTargetValue(), expected.getTargetValue());","lastModifiedDate":"2023-10-27"},{"lineNumber":763,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":764,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":765,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":766,"author":{"gitId":"AlWo223"},"content":" void parseSport_validInput_sportParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":767,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"running\";","lastModifiedDate":"2023-10-27"},{"lineNumber":768,"author":{"gitId":"AlWo223"},"content":" Sport actual \u003d Parser.parseSport(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":769,"author":{"gitId":"AlWo223"},"content":" Sport expected \u003d Sport.RUNNING;","lastModifiedDate":"2023-10-27"},{"lineNumber":770,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":771,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":772,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":773,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":774,"author":{"gitId":"AlWo223"},"content":" void parseSport_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":775,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-27"},{"lineNumber":776,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseSport(invalidInput));","lastModifiedDate":"2023-10-27"},{"lineNumber":777,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":778,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":779,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":780,"author":{"gitId":"AlWo223"},"content":" void parseGoalType_validInput_goalTypeParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":781,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"distance\";","lastModifiedDate":"2023-10-27"},{"lineNumber":782,"author":{"gitId":"AlWo223"},"content":" GoalType actual \u003d Parser.parseGoalType(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":783,"author":{"gitId":"AlWo223"},"content":" GoalType expected \u003d GoalType.DISTANCE;","lastModifiedDate":"2023-10-27"},{"lineNumber":784,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":785,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":786,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":787,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":788,"author":{"gitId":"AlWo223"},"content":" void parsePeriod_validInput_periodParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":789,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"weekly\";","lastModifiedDate":"2023-10-27"},{"lineNumber":790,"author":{"gitId":"AlWo223"},"content":" Timespan actual \u003d Parser.parsePeriod(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":791,"author":{"gitId":"AlWo223"},"content":" Timespan expected \u003d Timespan.WEEKLY;","lastModifiedDate":"2023-10-27"},{"lineNumber":792,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":793,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":794,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":795,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":796,"author":{"gitId":"AlWo223"},"content":" void parsePeriod_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":797,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-27"},{"lineNumber":798,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parsePeriod(invalidInput));","lastModifiedDate":"2023-10-27"},{"lineNumber":799,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":800,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":801,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":802,"author":{"gitId":"AlWo223"},"content":" void parseTarget_validInput_targetParsed() throws AthletiException {","lastModifiedDate":"2023-10-27"},{"lineNumber":803,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"10000\";","lastModifiedDate":"2023-10-27"},{"lineNumber":804,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseTarget(validInput);","lastModifiedDate":"2023-10-27"},{"lineNumber":805,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 10000;","lastModifiedDate":"2023-10-27"},{"lineNumber":806,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-27"},{"lineNumber":807,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":808,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":809,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":810,"author":{"gitId":"AlWo223"},"content":" void parseTarget_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":811,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-27"},{"lineNumber":812,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseTarget(invalidInput));","lastModifiedDate":"2023-10-27"},{"lineNumber":813,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":814,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":815,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":816,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityGoalArguments_missingSport_throwAthletiException() {","lastModifiedDate":"2023-10-27"},{"lineNumber":817,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingActivityGoalArguments(-1, 1, 1, 1));","lastModifiedDate":"2023-10-27"},{"lineNumber":818,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":819,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":820,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":821,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityGoalArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-27"},{"lineNumber":822,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingActivityGoalArguments(1, 1, 1, 1));","lastModifiedDate":"2023-10-27"},{"lineNumber":823,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":824,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":825,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":826,"author":{"gitId":"AlWo223"},"content":" void parseDuration_validInput_durationParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":827,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"01:00:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":828,"author":{"gitId":"AlWo223"},"content":" LocalTime actual \u003d Parser.parseDuration(validInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":829,"author":{"gitId":"AlWo223"},"content":" LocalTime expected \u003d LocalTime.parse(\"01:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":830,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":831,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":832,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":833,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":834,"author":{"gitId":"AlWo223"},"content":" void parseDuration_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":835,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":836,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseDuration(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":837,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":838,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":839,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":840,"author":{"gitId":"AlWo223"},"content":" void parseDateTime_validInput_dateTimeParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":841,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"2021-09-01 06:00\";","lastModifiedDate":"2023-10-23"},{"lineNumber":842,"author":{"gitId":"AlWo223"},"content":" LocalDateTime actual \u003d Parser.parseDateTime(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":843,"author":{"gitId":"nihalzp"},"content":" LocalDateTime expected \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":844,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 06:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":845,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":846,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":847,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":848,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":849,"author":{"gitId":"AlWo223"},"content":" void parseDateTime_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":850,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":851,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseDateTime(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":852,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":853,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":854,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":855,"author":{"gitId":"nihalzp"},"content":" void parseDate_validInput_dateParsed() throws AthletiException {","lastModifiedDate":"2023-10-25"},{"lineNumber":856,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d \"2021-09-01\";","lastModifiedDate":"2023-10-25"},{"lineNumber":857,"author":{"gitId":"nihalzp"},"content":" LocalDate actual \u003d parseDate(validInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":858,"author":{"gitId":"nihalzp"},"content":" LocalDate expected \u003d LocalDate.parse(\"2021-09-01\");","lastModifiedDate":"2023-10-25"},{"lineNumber":859,"author":{"gitId":"nihalzp"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-25"},{"lineNumber":860,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":861,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":862,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":863,"author":{"gitId":"nihalzp"},"content":" void parseDate_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":864,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-25"},{"lineNumber":865,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDate(invalidInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":866,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":867,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":868,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":869,"author":{"gitId":"nihalzp"},"content":" void parseDate_invalidInputWithTime_throwAthletiException() {","lastModifiedDate":"2023-10-25"},{"lineNumber":870,"author":{"gitId":"nihalzp"},"content":" String invalidInput \u003d \"2021-09-01 06:00\";","lastModifiedDate":"2023-10-25"},{"lineNumber":871,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseDate(invalidInput));","lastModifiedDate":"2023-10-25"},{"lineNumber":872,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":873,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":874,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":875,"author":{"gitId":"AlWo223"},"content":" void parseDistance_validInput_distanceParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":876,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"10000\";","lastModifiedDate":"2023-10-23"},{"lineNumber":877,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseDistance(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":878,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 10000;","lastModifiedDate":"2023-10-23"},{"lineNumber":879,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":880,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":881,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":882,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":883,"author":{"gitId":"AlWo223"},"content":" void parseDistance_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":884,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":885,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseDistance(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":886,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":887,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":888,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":889,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityArguments_missingDuration_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":890,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingActivityArguments(-1, 1, 1));","lastModifiedDate":"2023-10-25"},{"lineNumber":891,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":892,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":893,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":894,"author":{"gitId":"AlWo223"},"content":" void checkMissingActivityArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":895,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingActivityArguments(1, 1, 1));","lastModifiedDate":"2023-10-23"},{"lineNumber":896,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":897,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":898,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":899,"author":{"gitId":"AlWo223"},"content":" void parseRunCycle_validInput_activityParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":900,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":901,"author":{"gitId":"nihalzp"},"content":" \"Morning Run duration/01:00:00 distance/10000 datetime/2021-09-01 06:00 elevation/60\";","lastModifiedDate":"2023-10-25"},{"lineNumber":902,"author":{"gitId":"AlWo223"},"content":" Run actual \u003d (Run) Parser.parseRunCycle(validInput, true);","lastModifiedDate":"2023-10-23"},{"lineNumber":903,"author":{"gitId":"AlWo223"},"content":" LocalTime movingTime \u003d LocalTime.parse(\"01:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":904,"author":{"gitId":"nihalzp"},"content":" LocalDateTime time \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":905,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 06:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":906,"author":{"gitId":"AlWo223"},"content":" Run expected \u003d new Run(\"Morning Run\", movingTime, 10000, time, 60);","lastModifiedDate":"2023-10-25"},{"lineNumber":907,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getCaption(), expected.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":908,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getMovingTime(), expected.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":909,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getDistance(), expected.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":910,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStartDateTime(), expected.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":911,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getElevationGain(), expected.getElevationGain());","lastModifiedDate":"2023-10-23"},{"lineNumber":912,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":913,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":914,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":915,"author":{"gitId":"AlWo223"},"content":" void parseElevation_validInput_elevationParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":916,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"60\";","lastModifiedDate":"2023-10-23"},{"lineNumber":917,"author":{"gitId":"AlWo223"},"content":" int actual \u003d Parser.parseElevation(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":918,"author":{"gitId":"AlWo223"},"content":" int expected \u003d 60;","lastModifiedDate":"2023-10-23"},{"lineNumber":919,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":920,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":921,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":922,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":923,"author":{"gitId":"AlWo223"},"content":" void parseElevation_invalidInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":924,"author":{"gitId":"AlWo223"},"content":" String invalidInput \u003d \"abc\";","lastModifiedDate":"2023-10-23"},{"lineNumber":925,"author":{"gitId":"AlWo223"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.parseElevation(invalidInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":926,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":927,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":928,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":929,"author":{"gitId":"AlWo223"},"content":" void checkMissingRunCycleArguments_missingElevation_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":930,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingRunCycleArguments(1, 1, 1, -1));","lastModifiedDate":"2023-10-25"},{"lineNumber":931,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":932,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":933,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":934,"author":{"gitId":"AlWo223"},"content":" void checkMissingRunCycleArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":935,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingRunCycleArguments(1, 1, 1, 1));","lastModifiedDate":"2023-10-23"},{"lineNumber":936,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":937,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":938,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":939,"author":{"gitId":"AlWo223"},"content":" void checkMissingSwimArguments_missingStyle_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":940,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkMissingSwimArguments(1, 1, 1, -1));","lastModifiedDate":"2023-10-25"},{"lineNumber":941,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":942,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":943,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":944,"author":{"gitId":"AlWo223"},"content":" void checkMissingSwimArguments_noMissingArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":945,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkMissingSwimArguments(1, 1, 1, 1));","lastModifiedDate":"2023-10-23"},{"lineNumber":946,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":947,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":948,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":949,"author":{"gitId":"AlWo223"},"content":" void checkEmptyActivityArguments_emptyCaption_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":950,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e Parser.checkEmptyActivityArguments(\"\", \" \", \" \", \" \"));","lastModifiedDate":"2023-10-25"},{"lineNumber":951,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":952,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":953,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":954,"author":{"gitId":"AlWo223"},"content":" void checkEmptyActivityArguments_noEmptyArguments_noExceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":955,"author":{"gitId":"AlWo223"},"content":" assertDoesNotThrow(() -\u003e Parser.checkEmptyActivityArguments(\"1\", \"1\", \"1\", \"1\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":956,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":957,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":958,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":959,"author":{"gitId":"AlWo223"},"content":" void parseSwim_validInput_swimParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":960,"author":{"gitId":"nihalzp"},"content":" String validInput \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":961,"author":{"gitId":"nihalzp"},"content":" \"Evening Swim duration/02:00:00 distance/20000 datetime/2021-09-01 18:00 style/freestyle\";","lastModifiedDate":"2023-10-25"},{"lineNumber":962,"author":{"gitId":"AlWo223"},"content":" Swim actual \u003d (Swim) Parser.parseSwim(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":963,"author":{"gitId":"AlWo223"},"content":" LocalTime movingTime \u003d LocalTime.parse(\"02:00:00\", DateTimeFormatter.ofPattern(\"HH:mm:ss\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":964,"author":{"gitId":"nihalzp"},"content":" LocalDateTime time \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":965,"author":{"gitId":"nihalzp"},"content":" LocalDateTime.parse(\"2021-09-01 18:00\", DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":966,"author":{"gitId":"AlWo223"},"content":" Swim expected \u003d new Swim(\"Evening Swim\", movingTime, 20000, time, Swim.SwimmingStyle.FREESTYLE);","lastModifiedDate":"2023-10-25"},{"lineNumber":967,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getCaption(), expected.getCaption());","lastModifiedDate":"2023-10-23"},{"lineNumber":968,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getMovingTime(), expected.getMovingTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":969,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getDistance(), expected.getDistance());","lastModifiedDate":"2023-10-23"},{"lineNumber":970,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStartDateTime(), expected.getStartDateTime());","lastModifiedDate":"2023-10-23"},{"lineNumber":971,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual.getStyle(), expected.getStyle());","lastModifiedDate":"2023-10-23"},{"lineNumber":972,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":973,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":974,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":975,"author":{"gitId":"AlWo223"},"content":" void parseSwimmingStyle_validInput_styleParsed() throws AthletiException {","lastModifiedDate":"2023-10-23"},{"lineNumber":976,"author":{"gitId":"AlWo223"},"content":" String validInput \u003d \"freestyle\";","lastModifiedDate":"2023-10-23"},{"lineNumber":977,"author":{"gitId":"AlWo223"},"content":" Swim.SwimmingStyle actual \u003d Parser.parseSwimmingStyle(validInput);","lastModifiedDate":"2023-10-23"},{"lineNumber":978,"author":{"gitId":"AlWo223"},"content":" Swim.SwimmingStyle expected \u003d Swim.SwimmingStyle.FREESTYLE;","lastModifiedDate":"2023-10-23"},{"lineNumber":979,"author":{"gitId":"AlWo223"},"content":" assertEquals(actual, expected);","lastModifiedDate":"2023-10-23"},{"lineNumber":980,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":981,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":982,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":983,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_repeatedDietGoal_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":984,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calories/1 calories/1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":985,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-23"},{"lineNumber":986,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":987,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":988,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":989,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSetEdit_invalidNutrient_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":990,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calorie/1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":991,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-23"},{"lineNumber":992,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":993,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":994,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":995,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalDelete_nonIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":996,"author":{"gitId":"yicheng-toh"},"content":" String nonIntegerInput \u003d \"nonInteger\";","lastModifiedDate":"2023-10-23"},{"lineNumber":997,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalDelete(nonIntegerInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":998,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":999,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":1000,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":1001,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalDelete_nonPositiveIntegerInput_throwAthletiException() {","lastModifiedDate":"2023-10-23"},{"lineNumber":1002,"author":{"gitId":"yicheng-toh"},"content":" String nonIntegerInput \u003d \"0\";","lastModifiedDate":"2023-10-23"},{"lineNumber":1003,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalDelete(nonIntegerInput));","lastModifiedDate":"2023-10-23"},{"lineNumber":1004,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":1005,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":30,"DaDevChia":87,"AlWo223":299,"yicheng-toh":77,"nihalzp":512}},{"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":"AlWo223"},"content":"if [ -e \"data/athleticli.bin\" ]","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"then","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" rm data/athleticli.bin","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"fi","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"java -jar $(find ../build/libs/ -mindepth 1 -print -quit) \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"diff -w EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" echo \"Test passed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" echo \"Test failed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"skylee03":1,"AlWo223":5,"-":22}}] diff --git a/AY2324S1-CS2113-T17-1_tp_master/commits.json b/AY2324S1-CS2113-T17-1_tp_master/commits.json index 01438ae..0ab9aee 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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"131ee521013bbe8bb827aebfde7d94c68d23d694","isMergeCommit":false,"messageTitle":"Add `Findable` interface and classes for find commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":207,"deletions":3}}},{"hash":"4b20c0518ce38fa346b95cf231b3b8031245a002","isMergeCommit":false,"messageTitle":"Add find commands into the parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":1}}},{"hash":"b7b7a16f0f429edd78b65b4a9fded8f3a17228ad","isMergeCommit":false,"messageTitle":"Update help messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":0}}},{"hash":"674c55c740884d4a4b914ee20f3585ec655afc1e","isMergeCommit":false,"messageTitle":"Remove redundant `try-catch` in `FindCommand`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":11}}},{"hash":"1c038a815dc0e0ae01dfce8c80fe5e5723fdec9e","isMergeCommit":true,"messageTitle":"Merge pull request #88 from skylee03/findable","messageBody":"Add `Findable` interface and classes for find commands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"4837bf70a4a4cc74ef4de8c775ceb8f657e5d0bf","isMergeCommit":false,"messageTitle":"Implement goal abstract class for goal functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"a40febfd328bf48cbd669cb2e7d0d06fdb607ab6","isMergeCommit":true,"messageTitle":"Merge pull request #95 from skylee03/abstract-goal","messageBody":"Implement goal abstract class for goal functionality","fileTypesAndContributionMap":{}},{"hash":"948f3b010187ccd97398a0bd2a4cd1159e152c0b","isMergeCommit":false,"messageTitle":"Add `Data data` as a parameter of `isAchieved`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"e1fa645e12c4edefe08f6c8aa7ffa177fc6cabcc","isMergeCommit":false,"messageTitle":"Apply singleton pattern on `AthletiCLI` and `Ui`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":5}}}]},{"date":"2023-10-26","commitResults":[{"hash":"14c3ab999da562617c2378169aa628b47a11aa8d","isMergeCommit":true,"messageTitle":"Merge pull request #100 from skylee03/goal-param","messageBody":"Add `Data data` as a parameter of `isAchieved`","fileTypesAndContributionMap":{}},{"hash":"4107d394795f0018e6dadd1ebb0d39d4ea02a242","isMergeCommit":false,"messageTitle":"Add text description about the design in DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":5}}},{"hash":"1dc84c23988b70fbefde0757fae45b026438f34d","isMergeCommit":false,"messageTitle":"Put the UG into the correct file","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":354,"deletions":396}}},{"hash":"055aa0d099009f347dfe563783d8f7d62a0c09a6","isMergeCommit":false,"messageTitle":"Add a good-looking theme to the website","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":16}}},{"hash":"fadf287939f95bcc4deba9f332991297d32d589f","isMergeCommit":false,"messageTitle":"Unify avatar size","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ab3ce4298f4f927908cdc5ef4939813e74619275","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b2a26ec920b4537abf7cc1928e7fd1352dac97fe","isMergeCommit":true,"messageTitle":"Merge pull request #105 from skylee03/dg-design","messageBody":"Expand DG and beautify website","fileTypesAndContributionMap":{}},{"hash":"40d16c10e6711c71653e17428e97ef8faa7600a7","isMergeCommit":false,"messageTitle":"Adjust `Goal` abstract class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":65}}},{"hash":"0cc98a77b2ca81f9cb7eec5361f231dd55f122b5","isMergeCommit":false,"messageTitle":"Use enum constructor","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":54}}}]},{"date":"2023-10-27","commitResults":[{"hash":"19f7f405488e0fb88b3f91306199689594d473be","isMergeCommit":true,"messageTitle":"Merge pull request #109 from skylee03/abstract-goal-update","messageBody":"Reimplement `Goal` abstract class","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":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"517dbf2ef08e51ef3147ff8211541ab7b268bc0b","isMergeCommit":false,"messageTitle":"Added sleep features to Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":4}}},{"hash":"fa882cecd3ffdfff6f0a21b60e1e3e1d0d7858be","isMergeCommit":true,"messageTitle":"Merge pull request #114 from DaDevChia/branch-sleep-improvements","messageBody":"Added sleep features to Developer Guide","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":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"9680fb5cbfc66a622ef25e63cedf0856b287cfbc","isMergeCommit":false,"messageTitle":"Write Junit tests for deleting activities","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":49,"deletions":0}}},{"hash":"b279d894da455e4a6b94b705d6dd10744d0cedfd","isMergeCommit":false,"messageTitle":"Write Test methods for adding activities","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":14,"deletions":2}}},{"hash":"c2b01c28c64ebb16539a46582f5d04b7f729da34","isMergeCommit":false,"messageTitle":"Add missing JavaDoc comments for activity related code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":132,"deletions":2}}},{"hash":"b6b1535a7bcd2c6bdf15a9cc298acf1b0f49b42c","isMergeCommit":false,"messageTitle":"Generate test cases for edit and list activity command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":130,"deletions":0}}}]},{"date":"2023-10-23","commitResults":[{"hash":"550788a79273863edfbd0f8809052bb24c8e02c4","isMergeCommit":false,"messageTitle":"Write missing Junit tests for all acitivty related classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":20},"test-code":{"insertions":335,"deletions":2}}},{"hash":"2195ac4fd6c71f4ecfe27489c2b0f22eb2b84e44","isMergeCommit":false,"messageTitle":"Enable autodelete of data file for text-ui-testing","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":5,"deletions":0}}},{"hash":"37582fa681a84a7d5aa7d3e41255e5a4a92f1a12","isMergeCommit":true,"messageTitle":"Merge master in branch Testing","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9871f65f832f963758acbe29ac6c8b5904d7360c","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":13,"deletions":14}}},{"hash":"831e293292d3cf0c51525528fd7530a206d49513","isMergeCommit":false,"messageTitle":"Disable test cases conflicting with github gradle check","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":0}}},{"hash":"98b3818cc30ca4ed43fc5c68034a93e9d77d79ce","isMergeCommit":false,"messageTitle":"Prevent tracking of negative activity distances","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"56a616f86a1cb48aef2f767739f4a2428fa791e5","isMergeCommit":false,"messageTitle":"Add comment regarding negative distances to user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-24","commitResults":[{"hash":"d621d8d4c5a15b8ac3c9457cf8b4def6ea0aa31f","isMergeCommit":false,"messageTitle":"Use timeformatter for moving time input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":27},"test-code":{"insertions":31,"deletions":10}}},{"hash":"9959e8f67b0b37188a88e103aca82b4e03567533","isMergeCommit":false,"messageTitle":"add find by date search for activity list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":1},"test-code":{"insertions":39,"deletions":0}}},{"hash":"105eeae4f365faf9a1312945ffc8b5b96ee598bf","isMergeCommit":false,"messageTitle":"Sort activity list from latest to earliest by default","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0},"test-code":{"insertions":7,"deletions":0}}},{"hash":"2686de94641bf71f6ff3f213a40d0a53736517c8","isMergeCommit":false,"messageTitle":"add filtering of activities by timespan","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":0},"test-code":{"insertions":11,"deletions":0}}},{"hash":"4ff3cd3b0025934e34bc85d3bf47dcafb02150fc","isMergeCommit":false,"messageTitle":"modify add activity command name","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":4},"docs":{"insertions":7,"deletions":7},"test-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-25","commitResults":[{"hash":"1da15e2c0b96a826b60d71297460cd46768cc9d7","isMergeCommit":false,"messageTitle":"Use locale english to format double output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"7cd215317542bbd6dd0b43b3ec1af0c58e0fad60","isMergeCommit":true,"messageTitle":"Merge pull request #91 from AlWo223/negdist","messageBody":"Prevent tracking of negative distances and adjust duration input format","fileTypesAndContributionMap":{}},{"hash":"ce187aa51bd3b58a1b0aec74ffdb97b9a43c892b","isMergeCommit":true,"messageTitle":"Merge pull request #92 from AlWo223/find_by_date","messageBody":"Implement find by date and timespan filtering of activities","fileTypesAndContributionMap":{}},{"hash":"533635c68a0112da3a3838a5fcf49e25db364e50","isMergeCommit":true,"messageTitle":"merge master in branch Testing","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc50d03b97b24b9a32ef110df07c805c7fc1e6e2","isMergeCommit":true,"messageTitle":"Merge pull request #89 from AlWo223/Testing","messageBody":"Add test methods and ui-testing for Activity","fileTypesAndContributionMap":{}},{"hash":"ac20ad28feba557e4e7668a5468bfb600ab2de3c","isMergeCommit":false,"messageTitle":"implement calculation of target metric for activity list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":71,"deletions":4},"test-code":{"insertions":28,"deletions":0}}},{"hash":"4ea08a04b08b9fe775a171660e4bfeac8e988b03","isMergeCommit":false,"messageTitle":"Add functionality to compare data with target value","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":16},"test-code":{"insertions":11,"deletions":7}}}]},{"date":"2023-10-26","commitResults":[{"hash":"0c950ee69d2eb6d124192c72835408b83a310d62","isMergeCommit":false,"messageTitle":"Generate sequence diagram for adding activities","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":0}}},{"hash":"8e96dcbf3f9af061a789ec4b1dad170a31cbd0f4","isMergeCommit":false,"messageTitle":"Write first draft for addactivity developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":2}}},{"hash":"15e2f30a3379c5d2e9054e3deadfc38740d11e20","isMergeCommit":true,"messageTitle":"write junit tests for activity goal","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cdb7c5f1d6e714d8bbaff9b3723cbce11d070037","isMergeCommit":false,"messageTitle":"Add instructions for adding activity goal in UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":0}}}]},{"date":"2023-10-27","commitResults":[{"hash":"b070890414c3ad8f3e3622d77122e08a606bd525","isMergeCommit":false,"messageTitle":"Implement AddActivityGoalCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0},"test-code":{"insertions":4,"deletions":0}}},{"hash":"b79e876a8dc86ec33e2ac52361a86b044126441d","isMergeCommit":false,"messageTitle":"Finish implementation of AddActivityGoalCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":190,"deletions":12},"test-code":{"insertions":52,"deletions":2}}},{"hash":"a5bfabd66657e761197f2977b902d68075b69986","isMergeCommit":true,"messageTitle":"Merge reimplementation of abstrac goal class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7e89b97e31dc8caaf90a1b619de9603e307062e7","isMergeCommit":false,"messageTitle":"Write test methods for setting activity goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":2},"docs":{"insertions":3,"deletions":2},"test-code":{"insertions":105,"deletions":31}}},{"hash":"060eb948d66824055dc410e78c70e8263b7a5af4","isMergeCommit":false,"messageTitle":"adjust code to fulfill coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":9},"test-code":{"insertions":10,"deletions":8}}},{"hash":"d7fd2259698e1432750d2f26f1388ae6a84d842a","isMergeCommit":false,"messageTitle":"Adjust JavaDoc comment of checkDate","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"6390d8b4ffc0ad6a128b5dc9d6ac486aa5c4295a","isMergeCommit":false,"messageTitle":"Remove setTarget test","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":3}}},{"hash":"6f8c5f55ac07dbdd15f72a9ea87c352dafd0f092","isMergeCommit":true,"messageTitle":"Merge pull request #113 from AlWo223/ActivityGoal","messageBody":"Activity Goal functionality and add command","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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"0073e679dd94d81932af308ccf2b525f5717ad7d","isMergeCommit":false,"messageTitle":"Add tests for diet goal and diet goal parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":9},"test-code":{"insertions":83,"deletions":44}}},{"hash":"8168c69bb23fd3ab242b30fda1f356df043bc346","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"075abf178d86f7bfc9cad32876d3eaae946d5ec9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into v2.0","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"e4a004f8366d44a9ce8d7cc48b3536497fa43c2f","isMergeCommit":false,"messageTitle":"Add diet goals to developers guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":95,"deletions":4}}},{"hash":"0fb7b737653eddf2d4dcd7276179878a6ddefe5f","isMergeCommit":true,"messageTitle":"Merge pull request #90 from yicheng-toh/v2.0","messageBody":"Add tests for diet goal and diet goal parser","fileTypesAndContributionMap":{}},{"hash":"1424e1cc60dee61ce9ff627a15fbb617c6ec33f3","isMergeCommit":false,"messageTitle":"Add diet goals to text ui test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}}]},{"date":"2023-10-25","commitResults":[{"hash":"6571556b1108e08fe2eb70c53b5553370fdd8d0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bf0fa992b3f8e3a05d016e933320999919a99592","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into v2.0","messageBody":"# Conflicts:\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"5eac6f50eda525e2c4a6ab8c1c2db884ada9a722","isMergeCommit":false,"messageTitle":"Remove grammatical error","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a8b9c18517348c5d1e2253f8c5633c0bad935ce5","isMergeCommit":true,"messageTitle":"Merge pull request #94 from yicheng-toh/v2.0","messageBody":"Add diet goals to text ui test","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":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"6ed6200b87c5bffeabc1c24c8b443f98fec292c0","isMergeCommit":false,"messageTitle":"Use Parameter class for diet parameters","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":13}}},{"hash":"0f40b8834b9b1a9e4650180f4938c58d051dd68d","isMergeCommit":false,"messageTitle":"Add time tracking for diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":162,"deletions":89}}},{"hash":"4abbcbe41c65853a869e8f6d8378ba6f52e13eca","isMergeCommit":false,"messageTitle":"Fix tests for diet commands","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":12,"deletions":3}}},{"hash":"eca691f3ab86b67edb48d70e15eb751d4277996c","isMergeCommit":false,"messageTitle":"Fix tests for diet parsers","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":65,"deletions":36}}},{"hash":"0fa31da6f9619119c3019d4adea72a9f33597cc3","isMergeCommit":false,"messageTitle":"Fix tests for diet classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":36,"deletions":15}}},{"hash":"d8cfe5bfd34245d1a72213fd5f952648183ec66c","isMergeCommit":false,"messageTitle":"Update message MESSAGE_DIET_INDEX_TYPE_INVALID","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"cd9b257c3fc7f20d503026f8c67e3231a9e66003","isMergeCommit":false,"messageTitle":"Add assertions in Diet class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"eee010dce17b6f224f8a909a60d8f681713c2bca","isMergeCommit":false,"messageTitle":"More input validation in Parser class for diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":3}}},{"hash":"02568aabc0b34b1f6c28dde8644704ae18d51054","isMergeCommit":false,"messageTitle":"Add index assertion in DeleteDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"e3595890c2588e040028fddd22a1091522c7aa40","isMergeCommit":false,"messageTitle":"Add more tests for diet parsers","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":281,"deletions":22}}},{"hash":"aacdf1b2545d69e5a1792692558a9042dd00d0ee","isMergeCommit":false,"messageTitle":"Update add-diet help message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"bef5447ef3d7c7f8f6db129515039e1b54aab108","isMergeCommit":false,"messageTitle":"Implement find-diet functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":3}}},{"hash":"358ed8984bdf10e3bf17c8964519afb0e3383669","isMergeCommit":false,"messageTitle":"Update parseDate function message and add tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":22,"deletions":0}}},{"hash":"20c228e6549a04b46f7288b0cbf379b05b25c507","isMergeCommit":false,"messageTitle":"Add class description for FindDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"1ff09d52277e1533f927db45e3809eb478f4795f","isMergeCommit":false,"messageTitle":"Update the user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}},{"hash":"081518a3e098a3be3a1ce114b74f8613b65b2fd5","isMergeCommit":false,"messageTitle":"Fix javadoc position","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"c156515369529f8434a1ff5802ef24c7352fa188","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into diet-time-tracking","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"66581411b947e2128990dbc7e8842c8f173230e3","isMergeCommit":false,"messageTitle":"Make datetime and date invalid message generic","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-26","commitResults":[{"hash":"e5496f639d77099a14a821d6b56703e4a27403c3","isMergeCommit":true,"messageTitle":"Merge pull request #102 from nihalzp/diet-time-tracking","messageBody":"Diet time tracking + find-diet","fileTypesAndContributionMap":{}},{"hash":"ea4303cfaeeebf080fad8b14dcf449d26498d38e","isMergeCommit":false,"messageTitle":"Implement edit-diet command and tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":76,"deletions":0},"test-code":{"insertions":164,"deletions":0}}},{"hash":"213ee0e65b536d7aa87951784bb4c273299c559e","isMergeCommit":false,"messageTitle":"Implement the edit-diet functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":6},"test-code":{"insertions":64,"deletions":2}}},{"hash":"60064b98d49fa5f7466495f3a0428250fdb52003","isMergeCommit":false,"messageTitle":"Update the userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":40}}},{"hash":"488c90ca391eee2676bb1a5c029550c0ce0f444f","isMergeCommit":false,"messageTitle":"Update javadoc comments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":8}}},{"hash":"af978412476f2640e94b2ec5a3e04c6546ca9a30","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into diet-edit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"80a2b59c9231ce13b5b49f59d2519876eb646343","isMergeCommit":false,"messageTitle":"Use assertArrayEquals instead of assertEquals","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":22}}},{"hash":"db168593db10286bb1470ebfd6d97f12f8dfdfc7","isMergeCommit":true,"messageTitle":"Merge pull request #106 from nihalzp/diet-edit","messageBody":"Diet Edit Feature","fileTypesAndContributionMap":{}},{"hash":"b75c496ed9a516cabb66372a50244503e91d9a27","isMergeCommit":false,"messageTitle":"Add implementation and user stories diet DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":8}}},{"hash":"8ba22bca40a143b34b68d09dfec613e25087b334","isMergeCommit":true,"messageTitle":"Merge pull request #107 from nihalzp/developer-guide","messageBody":"Developer Guide for Diet","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"skylee03":{"docs":384,"functional-code":971,"test-code":30,"other":4},"DaDevChia":{"docs":112,"functional-code":478,"test-code":400},"AlWo223":{"docs":195,"functional-code":1404,"test-code":1064,"other":5},"yicheng-toh":{"docs":225,"functional-code":364,"test-code":460,"other":1},"nihalzp":{"docs":160,"functional-code":948,"test-code":1013}},"authorContributionVariance":{"skylee03":36607.84,"DaDevChia":18386.273,"AlWo223":42012.94,"yicheng-toh":15042.861,"nihalzp":51064.895},"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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"131ee521013bbe8bb827aebfde7d94c68d23d694","isMergeCommit":false,"messageTitle":"Add `Findable` interface and classes for find commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":207,"deletions":3}}},{"hash":"4b20c0518ce38fa346b95cf231b3b8031245a002","isMergeCommit":false,"messageTitle":"Add find commands into the parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":1}}},{"hash":"b7b7a16f0f429edd78b65b4a9fded8f3a17228ad","isMergeCommit":false,"messageTitle":"Update help messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":0}}},{"hash":"674c55c740884d4a4b914ee20f3585ec655afc1e","isMergeCommit":false,"messageTitle":"Remove redundant `try-catch` in `FindCommand`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":11}}},{"hash":"1c038a815dc0e0ae01dfce8c80fe5e5723fdec9e","isMergeCommit":true,"messageTitle":"Merge pull request #88 from skylee03/findable","messageBody":"Add `Findable` interface and classes for find commands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"4837bf70a4a4cc74ef4de8c775ceb8f657e5d0bf","isMergeCommit":false,"messageTitle":"Implement goal abstract class for goal functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"a40febfd328bf48cbd669cb2e7d0d06fdb607ab6","isMergeCommit":true,"messageTitle":"Merge pull request #95 from skylee03/abstract-goal","messageBody":"Implement goal abstract class for goal functionality","fileTypesAndContributionMap":{}},{"hash":"948f3b010187ccd97398a0bd2a4cd1159e152c0b","isMergeCommit":false,"messageTitle":"Add `Data data` as a parameter of `isAchieved`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"e1fa645e12c4edefe08f6c8aa7ffa177fc6cabcc","isMergeCommit":false,"messageTitle":"Apply singleton pattern on `AthletiCLI` and `Ui`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":5}}}]},{"date":"2023-10-26","commitResults":[{"hash":"14c3ab999da562617c2378169aa628b47a11aa8d","isMergeCommit":true,"messageTitle":"Merge pull request #100 from skylee03/goal-param","messageBody":"Add `Data data` as a parameter of `isAchieved`","fileTypesAndContributionMap":{}},{"hash":"4107d394795f0018e6dadd1ebb0d39d4ea02a242","isMergeCommit":false,"messageTitle":"Add text description about the design in DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":5}}},{"hash":"1dc84c23988b70fbefde0757fae45b026438f34d","isMergeCommit":false,"messageTitle":"Put the UG into the correct file","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":354,"deletions":396}}},{"hash":"055aa0d099009f347dfe563783d8f7d62a0c09a6","isMergeCommit":false,"messageTitle":"Add a good-looking theme to the website","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":16}}},{"hash":"fadf287939f95bcc4deba9f332991297d32d589f","isMergeCommit":false,"messageTitle":"Unify avatar size","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ab3ce4298f4f927908cdc5ef4939813e74619275","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b2a26ec920b4537abf7cc1928e7fd1352dac97fe","isMergeCommit":true,"messageTitle":"Merge pull request #105 from skylee03/dg-design","messageBody":"Expand DG and beautify website","fileTypesAndContributionMap":{}},{"hash":"40d16c10e6711c71653e17428e97ef8faa7600a7","isMergeCommit":false,"messageTitle":"Adjust `Goal` abstract class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":65}}},{"hash":"0cc98a77b2ca81f9cb7eec5361f231dd55f122b5","isMergeCommit":false,"messageTitle":"Use enum constructor","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":54}}}]},{"date":"2023-10-27","commitResults":[{"hash":"19f7f405488e0fb88b3f91306199689594d473be","isMergeCommit":true,"messageTitle":"Merge pull request #109 from skylee03/abstract-goal-update","messageBody":"Reimplement `Goal` abstract class","fileTypesAndContributionMap":{}},{"hash":"9a32abb1972242d0be51e236bd95c2322acaea01","isMergeCommit":false,"messageTitle":"Reimplement storage features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":353,"deletions":91}}}]},{"date":"2023-10-28","commitResults":[{"hash":"f77202842a486d6473ccf45587ad9b51d73faaeb","isMergeCommit":false,"messageTitle":"Change the type of goal timespan from `long` to `int`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-29","commitResults":[{"hash":"1a60499689a1b6b82adc814816abecdcd73c9437","isMergeCommit":true,"messageTitle":"Merge pull request #116 from skylee03/storage-editable","messageBody":"Reimplement 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":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"517dbf2ef08e51ef3147ff8211541ab7b268bc0b","isMergeCommit":false,"messageTitle":"Added sleep features to Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":4}}},{"hash":"fa882cecd3ffdfff6f0a21b60e1e3e1d0d7858be","isMergeCommit":true,"messageTitle":"Merge pull request #114 from DaDevChia/branch-sleep-improvements","messageBody":"Added sleep features to Developer Guide","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":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"9680fb5cbfc66a622ef25e63cedf0856b287cfbc","isMergeCommit":false,"messageTitle":"Write Junit tests for deleting activities","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":49,"deletions":0}}},{"hash":"b279d894da455e4a6b94b705d6dd10744d0cedfd","isMergeCommit":false,"messageTitle":"Write Test methods for adding activities","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":14,"deletions":2}}},{"hash":"c2b01c28c64ebb16539a46582f5d04b7f729da34","isMergeCommit":false,"messageTitle":"Add missing JavaDoc comments for activity related code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":132,"deletions":2}}},{"hash":"b6b1535a7bcd2c6bdf15a9cc298acf1b0f49b42c","isMergeCommit":false,"messageTitle":"Generate test cases for edit and list activity command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":130,"deletions":0}}}]},{"date":"2023-10-23","commitResults":[{"hash":"550788a79273863edfbd0f8809052bb24c8e02c4","isMergeCommit":false,"messageTitle":"Write missing Junit tests for all acitivty related classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":20},"test-code":{"insertions":335,"deletions":2}}},{"hash":"2195ac4fd6c71f4ecfe27489c2b0f22eb2b84e44","isMergeCommit":false,"messageTitle":"Enable autodelete of data file for text-ui-testing","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":5,"deletions":0}}},{"hash":"37582fa681a84a7d5aa7d3e41255e5a4a92f1a12","isMergeCommit":true,"messageTitle":"Merge master in branch Testing","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9871f65f832f963758acbe29ac6c8b5904d7360c","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":13,"deletions":14}}},{"hash":"831e293292d3cf0c51525528fd7530a206d49513","isMergeCommit":false,"messageTitle":"Disable test cases conflicting with github gradle check","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":0}}},{"hash":"98b3818cc30ca4ed43fc5c68034a93e9d77d79ce","isMergeCommit":false,"messageTitle":"Prevent tracking of negative activity distances","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"56a616f86a1cb48aef2f767739f4a2428fa791e5","isMergeCommit":false,"messageTitle":"Add comment regarding negative distances to user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-24","commitResults":[{"hash":"d621d8d4c5a15b8ac3c9457cf8b4def6ea0aa31f","isMergeCommit":false,"messageTitle":"Use timeformatter for moving time input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":27},"test-code":{"insertions":31,"deletions":10}}},{"hash":"9959e8f67b0b37188a88e103aca82b4e03567533","isMergeCommit":false,"messageTitle":"add find by date search for activity list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":1},"test-code":{"insertions":39,"deletions":0}}},{"hash":"105eeae4f365faf9a1312945ffc8b5b96ee598bf","isMergeCommit":false,"messageTitle":"Sort activity list from latest to earliest by default","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0},"test-code":{"insertions":7,"deletions":0}}},{"hash":"2686de94641bf71f6ff3f213a40d0a53736517c8","isMergeCommit":false,"messageTitle":"add filtering of activities by timespan","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":0},"test-code":{"insertions":11,"deletions":0}}},{"hash":"4ff3cd3b0025934e34bc85d3bf47dcafb02150fc","isMergeCommit":false,"messageTitle":"modify add activity command name","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":4},"docs":{"insertions":7,"deletions":7},"test-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-25","commitResults":[{"hash":"1da15e2c0b96a826b60d71297460cd46768cc9d7","isMergeCommit":false,"messageTitle":"Use locale english to format double output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"7cd215317542bbd6dd0b43b3ec1af0c58e0fad60","isMergeCommit":true,"messageTitle":"Merge pull request #91 from AlWo223/negdist","messageBody":"Prevent tracking of negative distances and adjust duration input format","fileTypesAndContributionMap":{}},{"hash":"ce187aa51bd3b58a1b0aec74ffdb97b9a43c892b","isMergeCommit":true,"messageTitle":"Merge pull request #92 from AlWo223/find_by_date","messageBody":"Implement find by date and timespan filtering of activities","fileTypesAndContributionMap":{}},{"hash":"533635c68a0112da3a3838a5fcf49e25db364e50","isMergeCommit":true,"messageTitle":"merge master in branch Testing","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc50d03b97b24b9a32ef110df07c805c7fc1e6e2","isMergeCommit":true,"messageTitle":"Merge pull request #89 from AlWo223/Testing","messageBody":"Add test methods and ui-testing for Activity","fileTypesAndContributionMap":{}},{"hash":"ac20ad28feba557e4e7668a5468bfb600ab2de3c","isMergeCommit":false,"messageTitle":"implement calculation of target metric for activity list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":71,"deletions":4},"test-code":{"insertions":28,"deletions":0}}},{"hash":"4ea08a04b08b9fe775a171660e4bfeac8e988b03","isMergeCommit":false,"messageTitle":"Add functionality to compare data with target value","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":16},"test-code":{"insertions":11,"deletions":7}}}]},{"date":"2023-10-26","commitResults":[{"hash":"0c950ee69d2eb6d124192c72835408b83a310d62","isMergeCommit":false,"messageTitle":"Generate sequence diagram for adding activities","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":0}}},{"hash":"8e96dcbf3f9af061a789ec4b1dad170a31cbd0f4","isMergeCommit":false,"messageTitle":"Write first draft for addactivity developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":2}}},{"hash":"15e2f30a3379c5d2e9054e3deadfc38740d11e20","isMergeCommit":true,"messageTitle":"write junit tests for activity goal","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cdb7c5f1d6e714d8bbaff9b3723cbce11d070037","isMergeCommit":false,"messageTitle":"Add instructions for adding activity goal in UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":0}}}]},{"date":"2023-10-27","commitResults":[{"hash":"b070890414c3ad8f3e3622d77122e08a606bd525","isMergeCommit":false,"messageTitle":"Implement AddActivityGoalCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0},"test-code":{"insertions":4,"deletions":0}}},{"hash":"b79e876a8dc86ec33e2ac52361a86b044126441d","isMergeCommit":false,"messageTitle":"Finish implementation of AddActivityGoalCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":190,"deletions":12},"test-code":{"insertions":52,"deletions":2}}},{"hash":"a5bfabd66657e761197f2977b902d68075b69986","isMergeCommit":true,"messageTitle":"Merge reimplementation of abstrac goal class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7e89b97e31dc8caaf90a1b619de9603e307062e7","isMergeCommit":false,"messageTitle":"Write test methods for setting activity goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":2},"docs":{"insertions":3,"deletions":2},"test-code":{"insertions":105,"deletions":31}}},{"hash":"060eb948d66824055dc410e78c70e8263b7a5af4","isMergeCommit":false,"messageTitle":"adjust code to fulfill coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":9},"test-code":{"insertions":10,"deletions":8}}},{"hash":"d7fd2259698e1432750d2f26f1388ae6a84d842a","isMergeCommit":false,"messageTitle":"Adjust JavaDoc comment of checkDate","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"6390d8b4ffc0ad6a128b5dc9d6ac486aa5c4295a","isMergeCommit":false,"messageTitle":"Remove setTarget test","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":3}}},{"hash":"6f8c5f55ac07dbdd15f72a9ea87c352dafd0f092","isMergeCommit":true,"messageTitle":"Merge pull request #113 from AlWo223/ActivityGoal","messageBody":"Activity Goal functionality and add command","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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"0073e679dd94d81932af308ccf2b525f5717ad7d","isMergeCommit":false,"messageTitle":"Add tests for diet goal and diet goal parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":9},"test-code":{"insertions":83,"deletions":44}}},{"hash":"8168c69bb23fd3ab242b30fda1f356df043bc346","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"075abf178d86f7bfc9cad32876d3eaae946d5ec9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into v2.0","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"e4a004f8366d44a9ce8d7cc48b3536497fa43c2f","isMergeCommit":false,"messageTitle":"Add diet goals to developers guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":95,"deletions":4}}},{"hash":"0fb7b737653eddf2d4dcd7276179878a6ddefe5f","isMergeCommit":true,"messageTitle":"Merge pull request #90 from yicheng-toh/v2.0","messageBody":"Add tests for diet goal and diet goal parser","fileTypesAndContributionMap":{}},{"hash":"1424e1cc60dee61ce9ff627a15fbb617c6ec33f3","isMergeCommit":false,"messageTitle":"Add diet goals to text ui test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}}]},{"date":"2023-10-25","commitResults":[{"hash":"6571556b1108e08fe2eb70c53b5553370fdd8d0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bf0fa992b3f8e3a05d016e933320999919a99592","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into v2.0","messageBody":"# Conflicts:\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"5eac6f50eda525e2c4a6ab8c1c2db884ada9a722","isMergeCommit":false,"messageTitle":"Remove grammatical error","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a8b9c18517348c5d1e2253f8c5633c0bad935ce5","isMergeCommit":true,"messageTitle":"Merge pull request #94 from yicheng-toh/v2.0","messageBody":"Add diet goals to text ui test","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":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"6ed6200b87c5bffeabc1c24c8b443f98fec292c0","isMergeCommit":false,"messageTitle":"Use Parameter class for diet parameters","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":13}}},{"hash":"0f40b8834b9b1a9e4650180f4938c58d051dd68d","isMergeCommit":false,"messageTitle":"Add time tracking for diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":162,"deletions":89}}},{"hash":"4abbcbe41c65853a869e8f6d8378ba6f52e13eca","isMergeCommit":false,"messageTitle":"Fix tests for diet commands","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":12,"deletions":3}}},{"hash":"eca691f3ab86b67edb48d70e15eb751d4277996c","isMergeCommit":false,"messageTitle":"Fix tests for diet parsers","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":65,"deletions":36}}},{"hash":"0fa31da6f9619119c3019d4adea72a9f33597cc3","isMergeCommit":false,"messageTitle":"Fix tests for diet classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":36,"deletions":15}}},{"hash":"d8cfe5bfd34245d1a72213fd5f952648183ec66c","isMergeCommit":false,"messageTitle":"Update message MESSAGE_DIET_INDEX_TYPE_INVALID","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"cd9b257c3fc7f20d503026f8c67e3231a9e66003","isMergeCommit":false,"messageTitle":"Add assertions in Diet class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"eee010dce17b6f224f8a909a60d8f681713c2bca","isMergeCommit":false,"messageTitle":"More input validation in Parser class for diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":3}}},{"hash":"02568aabc0b34b1f6c28dde8644704ae18d51054","isMergeCommit":false,"messageTitle":"Add index assertion in DeleteDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"e3595890c2588e040028fddd22a1091522c7aa40","isMergeCommit":false,"messageTitle":"Add more tests for diet parsers","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":281,"deletions":22}}},{"hash":"aacdf1b2545d69e5a1792692558a9042dd00d0ee","isMergeCommit":false,"messageTitle":"Update add-diet help message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"bef5447ef3d7c7f8f6db129515039e1b54aab108","isMergeCommit":false,"messageTitle":"Implement find-diet functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":3}}},{"hash":"358ed8984bdf10e3bf17c8964519afb0e3383669","isMergeCommit":false,"messageTitle":"Update parseDate function message and add tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":22,"deletions":0}}},{"hash":"20c228e6549a04b46f7288b0cbf379b05b25c507","isMergeCommit":false,"messageTitle":"Add class description for FindDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"1ff09d52277e1533f927db45e3809eb478f4795f","isMergeCommit":false,"messageTitle":"Update the user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}},{"hash":"081518a3e098a3be3a1ce114b74f8613b65b2fd5","isMergeCommit":false,"messageTitle":"Fix javadoc position","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"c156515369529f8434a1ff5802ef24c7352fa188","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into diet-time-tracking","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"66581411b947e2128990dbc7e8842c8f173230e3","isMergeCommit":false,"messageTitle":"Make datetime and date invalid message generic","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-26","commitResults":[{"hash":"e5496f639d77099a14a821d6b56703e4a27403c3","isMergeCommit":true,"messageTitle":"Merge pull request #102 from nihalzp/diet-time-tracking","messageBody":"Diet time tracking + find-diet","fileTypesAndContributionMap":{}},{"hash":"ea4303cfaeeebf080fad8b14dcf449d26498d38e","isMergeCommit":false,"messageTitle":"Implement edit-diet command and tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":76,"deletions":0},"test-code":{"insertions":164,"deletions":0}}},{"hash":"213ee0e65b536d7aa87951784bb4c273299c559e","isMergeCommit":false,"messageTitle":"Implement the edit-diet functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":6},"test-code":{"insertions":64,"deletions":2}}},{"hash":"60064b98d49fa5f7466495f3a0428250fdb52003","isMergeCommit":false,"messageTitle":"Update the userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":40}}},{"hash":"488c90ca391eee2676bb1a5c029550c0ce0f444f","isMergeCommit":false,"messageTitle":"Update javadoc comments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":8}}},{"hash":"af978412476f2640e94b2ec5a3e04c6546ca9a30","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into diet-edit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"80a2b59c9231ce13b5b49f59d2519876eb646343","isMergeCommit":false,"messageTitle":"Use assertArrayEquals instead of assertEquals","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":22}}},{"hash":"db168593db10286bb1470ebfd6d97f12f8dfdfc7","isMergeCommit":true,"messageTitle":"Merge pull request #106 from nihalzp/diet-edit","messageBody":"Diet Edit Feature","fileTypesAndContributionMap":{}},{"hash":"b75c496ed9a516cabb66372a50244503e91d9a27","isMergeCommit":false,"messageTitle":"Add implementation and user stories diet DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":8}}},{"hash":"8ba22bca40a143b34b68d09dfec613e25087b334","isMergeCommit":true,"messageTitle":"Merge pull request #107 from nihalzp/developer-guide","messageBody":"Developer Guide for Diet","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"skylee03":{"docs":384,"functional-code":1241,"test-code":30,"other":4},"DaDevChia":{"docs":112,"functional-code":478,"test-code":400},"AlWo223":{"docs":195,"functional-code":1401,"test-code":1064,"other":5},"yicheng-toh":{"docs":225,"functional-code":363,"test-code":460,"other":1},"nihalzp":{"docs":160,"functional-code":944,"test-code":1013}},"authorContributionVariance":{"skylee03":38478.28,"DaDevChia":17541.574,"AlWo223":40440.93,"yicheng-toh":14410.145,"nihalzp":48740.594},"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-3_tp_master/authorship.json b/AY2324S1-CS2113-T17-3_tp_master/authorship.json index 28448df..886dcf3 100644 --- a/AY2324S1-CS2113-T17-3_tp_master/authorship.json +++ b/AY2324S1-CS2113-T17-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":"martinschnder"},"content":" mainClass.set(\"seedu.stocker.Stocker\")","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":"martinschnder"},"content":" archiveBaseName.set(\"stocker\")","lastModifiedDate":"2023-10-09"},{"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":"TeoHaoZhi"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"martinschnder":2,"TeoHaoZhi":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":"TeoHaoZhi"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"|-----------------------------|:----------------:|:------------------------------------------:|:--------------------------------:|","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"| ![](team/Martin.jpeg) | Martin Schneider | [Github](https://github.com/martinschnder) | [Portfolio](docs/team/Martin.md) |","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"| ![](team/Karishma.png) | Karishma | [Github](https://github.com/karishma-t) | [Portfolio](team/karishma.md) |","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"karishma-t"},"content":"| ![](team/Barbara_image.JPG) | Barbara Chong | [Github](https://github.com/barbaracwx) | [Portfolio](team/Barbara.md) |","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"| ![](team/HaoZhi.png) | Teo Hao Zhi | [Github](https://github.com/TeoHaoZhi) | [Portfolio](team/HaoZhi.md) |","lastModifiedDate":"2023-10-06"},{"lineNumber":9,"author":{"gitId":"azfarulmatin"},"content":"| ![](team/Azfarul.JPG) | Azfarul Matin | [Github](https://github.com/azfarulmatin) | [Portfolio](team/Azfarul.md) |","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"karishma-t":1,"martinschnder":1,"azfarulmatin":2,"TeoHaoZhi":5,"-":2}},{"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":"TeoHaoZhi"},"content":"1. Reference to AB-3 Developer Guide","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"- [Source](https://se-education.org/addressbook-level3/DeveloperGuide.html#proposed-undoredo-feature)","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"- Used as template to structure this Developer Guide","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"\u003cimg src\u003d\"UML Diagrams/Architecture_Diagram.png\" width\u003d\"280\"\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"The architecture diagram given above explains the high level design of the application. The diagram depicts the key","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"component of the application that enables it to provide its functionalities.","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"Majority of the app\u0027s work is done by the following components","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"- Login System : Handles user authentication before enabling app usage","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"- Ui : Asks for user input by handling output messages","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"- Parser : Makes sense of user input","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"- Commands : List of various commands","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"- CommandResult : Execution of various commands","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":"The section below will explain in more detail the design considerations, implementations and rationale of the various","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"components listed above.","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"### Login System Component","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":"The login system component seeks to authenticate and login existing users or register a new user.","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":"#### Design considerations","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":"- There must be a way to check and verify users with a master list","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":"- The search for existing users username and password must be fast","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":"- Master list must be stored separately on hard drive of machine","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":"#### Implementation and rationale","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":"The login system class works in the following way. Upon booting up the application, a txt file","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":"containing a current list of existing users will be loaded into a users attribute within the class in the form of a hash","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"table.When a user attempts to login to their account, the entered username and password is checked against","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":"the current list of users in the hashtable. If the username and password matches, the user is logged in.","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":"As for registering new users, newly inputted username and password will be saved to the users attribute and this","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":"pair of username and password is then appended to the txt file containing current users. The updated user list will be","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":"loaded into the users attribute when the application is booted up again.","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":"The login system class uses the below methods to achieve its functionality","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":"- `authenticateUserChoice()` -Decides whether the user chooses to register or login","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":"- `newUserCreator()` -Creates a new user for future login","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":"- `loginExistingUser()` -Login existing user","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":"- `loadExistingUsers()` -Load existing users into hashtable for reference","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":"Given below is an example of how the login system class works.","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":"When the user first launches the programme, the Stocker object will be instantiated. The object will","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":"invoke its own `run()` method which will call its own `start()` method. The Stocker object then instantiates a","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":"new UI object which displays the login message by invoking `showLoginMessage()` method. At this point, Stocker object","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":"will also instantiate a new login system object.","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":"The login system object will invoke its own `run()` method to begin the login process. This method begins by loading","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":"existing users into the users attribute of the login system class by `loadExistingusers()` method. it then invokes","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":"`authenticateUserChoice()` to receive an input from the user to whether register or login a user. Based on the input of","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":"the user, either `newUserCreator()` is launched or `loginExistingUser()` methods will be called to register or login a","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":"user.","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":"The following sequence diagram shows how the login system class works when the program is launched.","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"\u003cimg src\u003d\"UML Diagrams/StockerToLoginSystem.png\" width\u003d\"280\"\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"martinschnder"},"content":"### Main data structures","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"martinschnder"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"martinschnder"},"content":"#### Implementation","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"martinschnder"},"content":"##### Drug","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"martinschnder"},"content":"The Drug class is very basic class for now. It only contains the product name as well as it\u0027s expiry date, but we will soon add some new properties such as product description, etc...","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"martinschnder"},"content":"##### Inventory","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"martinschnder"},"content":"The Inventory class is used to keep track of the quantity of product in stock. The hash map seemed to be the most appropriate data structure to match a product id to a quantity and a product entity which are encapsulated in a \"StockEntry\" class.","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"martinschnder"},"content":"##### Cart","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"martinschnder"},"content":"The Cart class is used to represent an ongoing transaction : to perform a sale, the vendor can add different products with their respective quantities in a cart which will be deducted from the inventory at the checkout.","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"martinschnder"},"content":"To represent this, we chose to use an arraylist of \"CartEntry\" classes which reprensent a product/quantity tuple.","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"martinschnder"},"content":"##### SalesList","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"martinschnder"},"content":"The SalesList is used to represent every past sales in order to create some statistics and reports. This class is only a list of subclasses representing validated carts.","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"martinschnder"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"Barbaracwx"},"content":"## Commands","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"Barbaracwx"},"content":"## 1. Find Function","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function is designed to enable users to search for specific drugs in the inventory using either the drug\u0027s","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"Barbaracwx"},"content":"name or the drugs expiry date. This component assists in locating and retrieving relevant drugs efficiently.","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"Barbaracwx"},"content":"**Design Considerations**","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"Barbaracwx"},"content":"The design of the \"Find\" function takes into account the following considerations:","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"Barbaracwx"},"content":"1. **Search Criteria:** The function must provide users with the ability to specify each criteria, such as keywords or","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"Barbaracwx"},"content":" attributes, to filter the items they are looking for.","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"Barbaracwx"},"content":"2. **Search Speed:** To enhance user experience, the search process should be fast and responsive, ensuring that users","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"Barbaracwx"},"content":" receive search results quickly.","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"Barbaracwx"},"content":"**Implementation and Rationale**","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function is implemented as follows:","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"Barbaracwx"},"content":"- **User-Defined Search Criteria:** Users provide search criteria, such as keywords, to define what they","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"Barbaracwx"},"content":" are looking for. The \"Find\" function processes these criteria to locate relevant items.","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"Barbaracwx"},"content":"- **Search Algorithm:** A robust search algorithm is employed to efficiently scan through the list of items and identify","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"Barbaracwx"},"content":" those","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"Barbaracwx"},"content":" that match the specified criteria.","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"Barbaracwx"},"content":"- **Result Presentation:** The function displays the search results, presenting users with a list of items that meet the","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"Barbaracwx"},"content":" search criteria, allowing them to quickly identify the items they are interested in.","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"Barbaracwx"},"content":"- **User-Friendly Interface:** The \"Find\" function is integrated into the user interface, making it easily accessible","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"Barbaracwx"},"content":" and intuitive for users to perform searches.","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"Barbaracwx"},"content":"- **Alternative Consideration:** During the design process, alternative approaches to searching are evaluated to ensure","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"Barbaracwx"},"content":" the","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"Barbaracwx"},"content":" most effective and user-friendly method is implemented.","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":142,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function offers a valuable way for users to narrow down their searches, find specific items of interest, and","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"Barbaracwx"},"content":"enhance the usability of the application.","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"Barbaracwx"},"content":"**Function Methods**","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":147,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function includes the following method to achieve its functionality:","lastModifiedDate":"2023-10-25"},{"lineNumber":148,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":149,"author":{"gitId":"Barbaracwx"},"content":"- `execute()` - This method is responsible for executing the \"Find\" command, searching for drugs that match the","lastModifiedDate":"2023-10-25"},{"lineNumber":150,"author":{"gitId":"Barbaracwx"},"content":" user-specified keyword within the inventory.","lastModifiedDate":"2023-10-25"},{"lineNumber":151,"author":{"gitId":"Barbaracwx"},"content":"- It returns a `CommandResult` containing the outcome of the command execution,","lastModifiedDate":"2023-10-25"},{"lineNumber":152,"author":{"gitId":"Barbaracwx"},"content":" which includes a success message and a list of found StockEntry objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"Barbaracwx"},"content":"**Example Usage**","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"Barbaracwx"},"content":"To illustrate how the \"Find\" function works, consider the following example usage:","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"Barbaracwx"},"content":"1. **User Input:** The user initiates the \"Find\" command by typing something like the following:","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"Barbaracwx"},"content":"`find /n panadol` - This command instructs the program to search for drugs in the inventory based on the name criteria","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"Barbaracwx"},"content":"and the keyword \"panadol.\"","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"Barbaracwx"},"content":"`find /d 12/03/2026` - This command instructs the program to search for drugs in the inventory based on the expiry date","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"Barbaracwx"},"content":"criteria and the keyword \"12/03/2026.\"","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"Barbaracwx"},"content":"2. **Method Execution:** The `execute()` method within the \"FindCommand\" class is called. It takes the provided keyword","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"Barbaracwx"},"content":" and criterion as input.","lastModifiedDate":"2023-10-25"},{"lineNumber":168,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"Barbaracwx"},"content":"3. **Search Process:** The method processes the search by iterating through the list of `StockEntry` objects in the","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"Barbaracwx"},"content":" inventory.","lastModifiedDate":"2023-10-25"},{"lineNumber":171,"author":{"gitId":"Barbaracwx"},"content":" For each entry, it checks if the `matches` method returns `true`, which means that the drug name or expiry date","lastModifiedDate":"2023-10-25"},{"lineNumber":172,"author":{"gitId":"Barbaracwx"},"content":" contains the given keyword.","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"Barbaracwx"},"content":"4. **Building Results:** As matching entries are found, they are added to a list called `foundEntries`.","lastModifiedDate":"2023-10-25"},{"lineNumber":174,"author":{"gitId":"Barbaracwx"},"content":"5. **Result Display:** The `CommandResult` is prepared, containing a success message (e.g., \"Listed all drugs with the","lastModifiedDate":"2023-10-25"},{"lineNumber":175,"author":{"gitId":"Barbaracwx"},"content":" keyword","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"Barbaracwx"},"content":" in the inventory.\") and the list of found `StockEntry` objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":177,"author":{"gitId":"Barbaracwx"},"content":"6. `User Feedback:` The result is then displayed to the user, showing a list of drugs in the inventory that match the","lastModifiedDate":"2023-10-25"},{"lineNumber":178,"author":{"gitId":"Barbaracwx"},"content":" specified keyword.","lastModifiedDate":"2023-10-25"},{"lineNumber":179,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":180,"author":{"gitId":"Barbaracwx"},"content":"The following sequence diagram shows how the Find Command function works. ","lastModifiedDate":"2023-10-25"},{"lineNumber":181,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"Barbaracwx"},"content":"\u003cimg src\u003d\"UML Diagrams/FindCommandDiagram.png\" width\u003d\"350\"\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":183,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"Barbaracwx"},"content":"Architecture Diagram of find command function:","lastModifiedDate":"2023-10-25"},{"lineNumber":185,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"Barbaracwx"},"content":"\u003cimg src\u003d\"UML Diagrams/FindCommandArchitectureDiagram.png\" width\u003d\"500\"\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":187,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":188,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":189,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"azfarulmatin"},"content":"## 2. ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"azfarulmatin"},"content":"The `ListCommand` is responsible for listing all drugs in the inventory. This command retrieves the list of drugs from the inventory and provides it as part of the command result. If the inventory is empty, it informs the user that the inventory has no drugs.","lastModifiedDate":"2023-10-26"},{"lineNumber":193,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":194,"author":{"gitId":"azfarulmatin"},"content":"### Design Considerations","lastModifiedDate":"2023-10-26"},{"lineNumber":195,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"azfarulmatin"},"content":"- **User-Friendly Listing:** The primary goal of the `ListCommand` is to provide a user-friendly way to list all drugs in the inventory, enhancing the user\u0027s experience in accessing inventory information.","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"azfarulmatin"},"content":"### Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"azfarulmatin"},"content":"The `ListCommand` is implemented as follows:","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"azfarulmatin"},"content":"- **Retrieving Drug List:** The command retrieves the list of drugs from the inventory using the `getAllDrugs` method.","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":204,"author":{"gitId":"azfarulmatin"},"content":"- **Handling Empty Inventory:** It checks if the list of drugs is empty. If the inventory is empty, it returns a user-friendly message indicating that the inventory is empty.","lastModifiedDate":"2023-10-26"},{"lineNumber":205,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"azfarulmatin"},"content":"- **Listing Drugs:** If the inventory contains drugs, the command constructs a success message and includes the list of drugs in the command result.","lastModifiedDate":"2023-10-26"},{"lineNumber":207,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":208,"author":{"gitId":"azfarulmatin"},"content":"### Function Methods","lastModifiedDate":"2023-10-26"},{"lineNumber":209,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":210,"author":{"gitId":"azfarulmatin"},"content":"The `ListCommand` includes the following method to achieve its functionality:","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"azfarulmatin"},"content":"- `execute()`: This method is responsible for executing the `ListCommand`, listing all drugs in the inventory. It checks the inventory, prepares a user-friendly result message, and returns a `CommandResult` containing the outcome of the command execution, which includes a success message and the list of found `Drug` objects.","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"azfarulmatin"},"content":"### Example Usage","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"azfarulmatin"},"content":"To illustrate how the `ListCommand` works, consider the following example usage:","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"azfarulmatin"},"content":"1. **User Input:** The user initiates the `ListCommand` by entering the following command:","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"azfarulmatin"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"karishma-t"},"content":"## 2. Delete Command","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function is designed to enable users to remove specific drugs from the inventory based on the drug\u0027s name. This component facilitates the management of the inventory by allowing users to remove drugs they no longer need, fully depleted or discontinued.","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"karishma-t"},"content":"**Design Considerations**","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"karishma-t"},"content":"The design of the \"Delete\" function takes into account the following considerations:","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"karishma-t"},"content":"1. **User-Specified Drug Name:** The function allows users to specify the drug name they want to delete from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"karishma-t"},"content":"2. **Data Integrity:** It ensures that the deletion operation maintains the integrity of the inventory data structure, updating it correctly.","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"karishma-t"},"content":"**Implementation and Rationale**","lastModifiedDate":"2023-10-26"},{"lineNumber":235,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":236,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function is implemented as follows:","lastModifiedDate":"2023-10-26"},{"lineNumber":237,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":238,"author":{"gitId":"karishma-t"},"content":"- **User-Defined Drug Name:** Users provide the name of the drug they wish to delete.","lastModifiedDate":"2023-10-26"},{"lineNumber":239,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":240,"author":{"gitId":"karishma-t"},"content":"- **Data Deletion Algorithm:** The function employs data deletion logic to remove the specified drug from the inventory. This involves identifying the drug based on the provided name and removing it from the list.","lastModifiedDate":"2023-10-26"},{"lineNumber":241,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":242,"author":{"gitId":"karishma-t"},"content":"- **Error Handling:** The function includes error handling to address scenarios where the specified drug is not found in the inventory. In such cases, an appropriate error message is generated.","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":244,"author":{"gitId":"karishma-t"},"content":"- **User Feedback:** Upon successful deletion, the function generates a success message confirming the removal of the drug.","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function is an essential feature for managing the inventory, allowing users to keep it up to date and remove unwanted or outdated drugs.","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"karishma-t"},"content":"**Function Methods**","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function includes the following method to achieve its functionality:","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"karishma-t"},"content":"- `execute()` - This method is responsible for executing the \"Delete\" command, removing the drug with the specified name from the inventory. It returns a `CommandResult` containing the outcome of the command execution, which includes a success message upon successful deletion or an error message if the drug is not found in the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"karishma-t"},"content":"**Example Usage**","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":256,"author":{"gitId":"karishma-t"},"content":"To illustrate how the \"Delete\" function works, consider the following example usage:","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"karishma-t"},"content":"1. **User Input:** The user initiates the \"Delete\" command by typing something like the following:","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"karishma-t"},"content":" `delete /n panadol`- This command instructs the program to remove the drug named \"paracetamol\" from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"karishma-t"},"content":"2. **Method Execution:** The `execute()` method within the \"DeleteCommand\" class is called. It takes the provided drug name as input.","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":263,"author":{"gitId":"karishma-t"},"content":"3. **Search Process:** The method processes the deletion by searching for the drug with the specified name in the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":264,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"karishma-t"},"content":"4. **Deletion Operation:** If the drug is found, it is removed from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"karishma-t"},"content":"5. **Success Message:** The `CommandResult` is prepared, containing a success message (e.g., \"Drug removed from inventory: paracetamol\").","lastModifiedDate":"2023-10-26"},{"lineNumber":268,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":269,"author":{"gitId":"karishma-t"},"content":"6. **User Feedback:** The result is displayed to the user, confirming the successful removal of the drug from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function provides a straightforward way for users to manage the inventory by removing specific drugs as needed.","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"karishma-t"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":275,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":276,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":277,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":278,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":279,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":281,"author":{"gitId":"Barbaracwx"},"content":"- Works in the field of drug distribution, such as pharmacies and doctors\u0027 offices.","lastModifiedDate":"2023-10-25"},{"lineNumber":282,"author":{"gitId":"Barbaracwx"},"content":"- Manages a large inventory of pharmaceuticals with varying details (expiration dates, manufacturers, storage","lastModifiedDate":"2023-10-25"},{"lineNumber":283,"author":{"gitId":"Barbaracwx"},"content":" conditions).","lastModifiedDate":"2023-10-25"},{"lineNumber":284,"author":{"gitId":"Barbaracwx"},"content":"- Prefers desktop applications for their work.","lastModifiedDate":"2023-10-25"},{"lineNumber":285,"author":{"gitId":"Barbaracwx"},"content":"- Proficient in fast typing.","lastModifiedDate":"2023-10-25"},{"lineNumber":286,"author":{"gitId":"Barbaracwx"},"content":"- Favors typing over mouse interactions.","lastModifiedDate":"2023-10-25"},{"lineNumber":287,"author":{"gitId":"Barbaracwx"},"content":"- Comfortable using Command Line Interface (CLI) applications for efficiency.","lastModifiedDate":"2023-10-25"},{"lineNumber":288,"author":{"gitId":"Barbaracwx"},"content":"- Requires password-protected access to sensitive patient healthcare information.","lastModifiedDate":"2023-10-25"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":290,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":292,"author":{"gitId":"Barbaracwx"},"content":"**Stocker** is designed to cater to the specific needs of drug distributors by offering the following benefits:","lastModifiedDate":"2023-10-25"},{"lineNumber":293,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":294,"author":{"gitId":"Barbaracwx"},"content":"1. Quick access to real-time inventory information.","lastModifiedDate":"2023-10-25"},{"lineNumber":295,"author":{"gitId":"Barbaracwx"},"content":"2. Efficient tracking of incoming stock.","lastModifiedDate":"2023-10-25"},{"lineNumber":296,"author":{"gitId":"Barbaracwx"},"content":"3. Categorization of drugs based on various labels.","lastModifiedDate":"2023-10-25"},{"lineNumber":297,"author":{"gitId":"Barbaracwx"},"content":"4. A prioritized list of urgently needed restocks for timely replenishment.","lastModifiedDate":"2023-10-25"},{"lineNumber":298,"author":{"gitId":"Barbaracwx"},"content":"5. Assistance in generating comprehensive reports for stock turnover analysis.","lastModifiedDate":"2023-10-25"},{"lineNumber":299,"author":{"gitId":"Barbaracwx"},"content":"6. Secure access through individual user accounts to safeguard patient healthcare data.","lastModifiedDate":"2023-10-25"},{"lineNumber":300,"author":{"gitId":"Barbaracwx"},"content":"7. Enhanced user experience for experienced professionals who prefer keyboard commands and CLI interactions for seamless","lastModifiedDate":"2023-10-25"},{"lineNumber":301,"author":{"gitId":"Barbaracwx"},"content":" stock management.","lastModifiedDate":"2023-10-25"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":303,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":305,"author":{"gitId":"martinschnder"},"content":"Priorities: High (must have) - \\* \\* _, Medium (nice to have) - _ _, Low (unlikely to have) - _","lastModifiedDate":"2023-10-25"},{"lineNumber":306,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":307,"author":{"gitId":"Barbaracwx"},"content":"| Priority | Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2023-10-25"},{"lineNumber":308,"author":{"gitId":"martinschnder"},"content":"| -------- | ------- | ----------------- | ---------------------------------------------------- | ----------------------------------------------------------- |","lastModifiedDate":"2023-10-25"},{"lineNumber":309,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Pharmacist | Add drugs to track what drugs are available in stock | Reduce manual errors |","lastModifiedDate":"2023-10-25"},{"lineNumber":310,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Pharmacist | Remove drugs to track what are no longer in used | Ensure compliance |","lastModifiedDate":"2023-10-25"},{"lineNumber":311,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Receptionist | View a list of products of that category | Easily obtain an overview of the products |","lastModifiedDate":"2023-10-25"},{"lineNumber":312,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | First-time user | See a list of all available actions | Better understand how to use the application |","lastModifiedDate":"2023-10-25"},{"lineNumber":313,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Inventory Manager | Find a specific drug currently in the system | Check up its details and quantities specifically |","lastModifiedDate":"2023-10-25"},{"lineNumber":314,"author":{"gitId":"martinschnder"},"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-25"},{"lineNumber":315,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":316,"author":{"gitId":"martinschnder"},"content":"_(More to be added)_","lastModifiedDate":"2023-10-25"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":318,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":320,"author":{"gitId":"Barbaracwx"},"content":"1. Should work on any mainstream OS as long as it has Java 11 or above installed.","lastModifiedDate":"2023-10-25"},{"lineNumber":321,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":322,"author":{"gitId":"Barbaracwx"},"content":"2. Should be able to hold up to 1000 drug entries without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2023-10-25"},{"lineNumber":323,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":324,"author":{"gitId":"Barbaracwx"},"content":"3. A user with above-average typing speed for regular English text (i.e. not code, not system admin commands) should be","lastModifiedDate":"2023-10-25"},{"lineNumber":325,"author":{"gitId":"Barbaracwx"},"content":" able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2023-10-25"},{"lineNumber":326,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":327,"author":{"gitId":"martinschnder"},"content":"_(More to be added)_","lastModifiedDate":"2023-10-25"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":329,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":331,"author":{"gitId":"martinschnder"},"content":"- _glossary item_ - Definition","lastModifiedDate":"2023-10-25"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":333,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":335,"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":{"karishma-t":52,"martinschnder":46,"azfarulmatin":32,"TeoHaoZhi":55,"-":30,"Barbaracwx":120}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"# Stocker","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker v1.o is a desktop app that will provide quick access to currently available stock,","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"track incoming stock and expiration dates, and categorize drugs based on different labels.","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"It is optimized for use via a Command Line Interface (CLI). If you can type fast, Stocker","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"can get your inventory management tasks done faster than traditional GUI apps.","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"TeoHaoZhi":5,"-":6}},{"path":"docs/UML Diagrams/ArchitectureDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"title Architecture Diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"skinparam component {","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"BackgroundColor lightblue","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"[Parser]","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"[Commands]","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"[CommandResult]","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"[LoginSystem and Ui] as interactor","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"interface \"user\"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"user -[hidden]- Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"CommandResult -[hidden]- Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"interactor --\u003e Parser : Makes sense of input","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"Parser -\u003e Commands : Searches for inputted command","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"Commands -\u003e CommandResult : Executes relevant command","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"CommandResult -\u003e interactor : Return control","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"user -[#red]-\u003e interactor : Logs in or Register","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"TeoHaoZhi":25}},{"path":"docs/UML Diagrams/FindCommandArchitectureDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"@startuml FindCommandArchitectureDiagram","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"!define ARROW_STYLE [-[#LOGIC_COLOR]-\u003e]","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"actor User as U","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"package \"Your Application\" {","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":" [User Interface] as UI","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":" [FindCommand] as FindCmd","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" [Inventory] as Inv","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":" [StockEntry] as Entry","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":" [CommandResult] as CmdResult","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"U -down-\u003e UI: Initiates \u0027Find\u0027 Command","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":"UI -down-\u003e FindCmd: Invokes \u0027FindCommand\u0027","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":"UI -down-\u003e Inv: Accesses \u0027Inventory\u0027","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"FindCmd -down-\u003e Entry: Iterates Through Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":"Entry -down-\u003e Entry: Checks Each Entry","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"Entry --\u003e FindCmd: Match/No Match","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":"FindCmd --\u003e CmdResult: Prepares Result","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":"CmdResult -up-\u003e UI: Returns Result","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":"CmdResult -up-\u003e U: Displays Search Results","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"Barbaracwx":26}},{"path":"docs/UML Diagrams/FindCommandDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"@startuml FindCommandDiagram","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"!define LOGIC_COLOR_T1 #7777DB","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"actor User","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"participant \"FindCommand\" as FindCmd LOGIC_COLOR_T1","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"participant \"Inventory\" as Inventory LOGIC_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"User -\u003e FindCmd: Execute \u0027Find\u0027 Command","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":"User \u003c-- FindCmd: CommandResult","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"FindCmd -\u003e Inventory: Retrieve Stock Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"Inventory --\u003e FindCmd: List of Stock Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"FindCmd -\u003e FindCmd: Process Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":"FindCmd --\u003e User: Display Search Results","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"Barbaracwx":17}},{"path":"docs/UML Diagrams/ListCommand.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"azfarulmatin"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"azfarulmatin"},"content":"class ListCommand {","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"azfarulmatin"},"content":" - COMMAND_WORD: String","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":" - MESSAGE_USAGE: String","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"azfarulmatin"},"content":" - MESSAGE_SUCCESS: String","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"azfarulmatin"},"content":" + execute(): CommandResult","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"azfarulmatin"},"content":"}","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"azfarulmatin"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"azfarulmatin":8}},{"path":"docs/UML Diagrams/StockerToLoginSystem.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"@startuml","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"\u0027https://plantuml.com/sequence-diagram","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"hide footbox","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"actor User","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"Participant \":Stocker\" as Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"Participant \":Ui\" as Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"Participant \":LoginSystem\" as LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"User -\u003e Stocker : Stocker()","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"activate Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e Stocker : run()","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"activate Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e Stocker :start()","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e Ui : Ui()","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"activate Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"Ui -\u003e Ui : showLoginMessage()","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"activate Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"Ui -\u003e Ui : ShowToUser()","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"Ui --\u003e User : LoginMessage","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e LoginSystem :LoginSystem()","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"activate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem : run()","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"activate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem : loadExistingUsers()","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem: authenticateUserChoice()","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"User -\u003e LoginSystem : register or login input","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":"alt Register","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem : newUserCreator()","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem --\u003e User : showSuccessfulRegistrationMessage()","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":"else Login","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003eLoginSystem : loginExistingUser()","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem --\u003e User: showSuccessfulLoginMessage()","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":"end","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":"@enduml","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"TeoHaoZhi":47}},{"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":"TeoHaoZhi"},"content":"Stocker v1.o is a desktop app that will provide quick access to currently available stock, ","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"track incoming stock and expiration dates, and categorize drugs based on different labels. ","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"It is optimized for use via a Command Line Interface (CLI). If you can type fast, Stocker ","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"can get your inventory management tasks done faster than traditional GUI apps.","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"{Give steps to get started quickly}","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"1. Down the latest version of `Stocker` from [here](https://github.com/AY2324S1-CS2113-T17-3/tp/releases).","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-Login System","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"Authentication system that allows user to register as a user or login","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"as an existing user.","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-add","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a drug into the inventory list.","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-delete","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"Deletes a drug being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-list","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":"List all drug information that is being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-find","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":"Finds drugs using their name or expiry date.","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-help","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":"List all currently available commands in current version, their ","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"uses and how to format them in the command line.","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-register","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":"Register a new user into the login system.","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-login","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":"Login an existing user into the system.","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-save","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"TeoHaoZhi"},"content":"Save existing drugs from inventory list onto a txt file.","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"TeoHaoZhi"},"content":"File is then used to update inventory list when stocker is ran.","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-add vendor","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a vendor into a list to be tracked by the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature- list vendors","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":"Displays the name of all vendors being tracked by the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":"## Usage","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":"### `Login System`- Create new user or login existing user","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":"Login system is automatically launched at the start of the programme.","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":"**Registering a user**","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 1 : Enter register to select option to register a user.","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e ","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 2: Enter desired username and password.","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e ","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Upon successful creation, registration success message is observed","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":"Registration successful.","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":"**Login an existing user**","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 1 : Enter login to select option to login a user.","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 2: Enter registered username and password.","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Upon successful creation, successful login message is observed.","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":"Login Successful.","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"TeoHaoZhi"},"content":"### `add` - Adds drug into inventory list","lastModifiedDate":"2023-10-10"},{"lineNumber":101,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":102,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a drug to be tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":103,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":104,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":105,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":106,"author":{"gitId":"TeoHaoZhi"},"content":"add /n DRUG_NAME /d EXPIRY_DATE /q QUANTITY","lastModifiedDate":"2023-10-10"},{"lineNumber":107,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":109,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":110,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":111,"author":{"gitId":"TeoHaoZhi"},"content":"`add /n Panadol /d 12 June 2026 /q 300","lastModifiedDate":"2023-10-10"},{"lineNumber":112,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":113,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":114,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":115,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":116,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":117,"author":{"gitId":"TeoHaoZhi"},"content":"New drug added in the inventory: Panadol","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":119,"author":{"gitId":"TeoHaoZhi"},"content":"### `delete` - Deletes a drug being tracked by the system","lastModifiedDate":"2023-10-10"},{"lineNumber":120,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":121,"author":{"gitId":"TeoHaoZhi"},"content":"Deletes a drug being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":122,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":123,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":124,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":125,"author":{"gitId":"TeoHaoZhi"},"content":"delete /n DRUG_NAM","lastModifiedDate":"2023-10-10"},{"lineNumber":126,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":127,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":128,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":129,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":130,"author":{"gitId":"TeoHaoZhi"},"content":"`delete /n Panadol","lastModifiedDate":"2023-10-10"},{"lineNumber":131,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":132,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":133,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":134,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":135,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":136,"author":{"gitId":"TeoHaoZhi"},"content":"removed : Panadol","lastModifiedDate":"2023-10-10"},{"lineNumber":137,"author":{"gitId":"TeoHaoZhi"},"content":"There are now 0 drugs in the system","lastModifiedDate":"2023-10-10"},{"lineNumber":138,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":139,"author":{"gitId":"TeoHaoZhi"},"content":"### `list` - List all drug information that is being tracked by the system","lastModifiedDate":"2023-10-10"},{"lineNumber":140,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":141,"author":{"gitId":"TeoHaoZhi"},"content":"List all drug information that is being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":142,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":143,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":144,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":145,"author":{"gitId":"TeoHaoZhi"},"content":"list","lastModifiedDate":"2023-10-10"},{"lineNumber":146,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":147,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":148,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":149,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":150,"author":{"gitId":"TeoHaoZhi"},"content":"`list","lastModifiedDate":"2023-10-10"},{"lineNumber":151,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":152,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":153,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":154,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":155,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":156,"author":{"gitId":"TeoHaoZhi"},"content":"|| 1. Name: Panadol, Expiry Date: 12 June 2026/ Quantity: 300","lastModifiedDate":"2023-10-29"},{"lineNumber":157,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"TeoHaoZhi"},"content":"Listed all drugs in the inventory.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":160,"author":{"gitId":"Barbaracwx"},"content":"### `find` - Finds drugs using their name or expiry date","lastModifiedDate":"2023-10-20"},{"lineNumber":161,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":162,"author":{"gitId":"Barbaracwx"},"content":"1. Finds drugs whose **names** contain any of the given keywords.","lastModifiedDate":"2023-10-20"},{"lineNumber":163,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":165,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":166,"author":{"gitId":"Barbaracwx"},"content":"find /n panadol","lastModifiedDate":"2023-10-20"},{"lineNumber":167,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":168,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":169,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":170,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":171,"author":{"gitId":"Barbaracwx"},"content":"` find /n KEYWORD ","lastModifiedDate":"2023-10-20"},{"lineNumber":172,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":173,"author":{"gitId":"Barbaracwx"},"content":"- The search is case-insensitive, meaning that \"aspirin\" will match \"Aspirin.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":174,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":175,"author":{"gitId":"Barbaracwx"},"content":"- The order of the keywords does not matter. For example, \"Painkiller Relief\" will match \"Relief Painkiller.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":176,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":177,"author":{"gitId":"Barbaracwx"},"content":"- Only the drug name is searched.","lastModifiedDate":"2023-10-20"},{"lineNumber":178,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":179,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":180,"author":{"gitId":"Barbaracwx"},"content":"Expected outcome:","lastModifiedDate":"2023-10-20"},{"lineNumber":181,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":182,"author":{"gitId":"Barbaracwx"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":183,"author":{"gitId":"Barbaracwx"},"content":"1. Name: panadol, Expiry Date: 12 sep, Quantity: 120","lastModifiedDate":"2023-10-20"},{"lineNumber":184,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":185,"author":{"gitId":"Barbaracwx"},"content":"Listed all drugs with the keyword in the inventory.","lastModifiedDate":"2023-10-20"},{"lineNumber":186,"author":{"gitId":"Barbaracwx"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":187,"author":{"gitId":"Barbaracwx"},"content":"2. Finds drugs whose **expiry dates** contain any of the given keywords.","lastModifiedDate":"2023-10-20"},{"lineNumber":188,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":189,"author":{"gitId":"Barbaracwx"},"content":"Format:","lastModifiedDate":"2023-10-20"},{"lineNumber":190,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":191,"author":{"gitId":"Barbaracwx"},"content":"find /d sep","lastModifiedDate":"2023-10-20"},{"lineNumber":192,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":193,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":194,"author":{"gitId":"Barbaracwx"},"content":"Example of usage:","lastModifiedDate":"2023-10-20"},{"lineNumber":195,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":196,"author":{"gitId":"Barbaracwx"},"content":"` find /d KEYWORD","lastModifiedDate":"2023-10-20"},{"lineNumber":197,"author":{"gitId":"Barbaracwx"},"content":"`","lastModifiedDate":"2023-10-20"},{"lineNumber":198,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":199,"author":{"gitId":"Barbaracwx"},"content":"- Only the drug\u0027s expiry date is searched.","lastModifiedDate":"2023-10-20"},{"lineNumber":200,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":201,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":202,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":203,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":204,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":205,"author":{"gitId":"Barbaracwx"},"content":"1. Name: panadol, Expiry Date: 12 sep, Quantity: 120","lastModifiedDate":"2023-10-20"},{"lineNumber":206,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":207,"author":{"gitId":"Barbaracwx"},"content":"Listed all drugs with the keyword in the inventory.","lastModifiedDate":"2023-10-20"},{"lineNumber":208,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":209,"author":{"gitId":"TeoHaoZhi"},"content":"### `help` - List currently available commands in current version, their uses and how to format them in the command line","lastModifiedDate":"2023-10-10"},{"lineNumber":210,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":211,"author":{"gitId":"TeoHaoZhi"},"content":"List all currently available commands in current version, ","lastModifiedDate":"2023-10-10"},{"lineNumber":212,"author":{"gitId":"TeoHaoZhi"},"content":"their uses and how to format them in the command line","lastModifiedDate":"2023-10-10"},{"lineNumber":213,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":214,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":215,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":216,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":217,"author":{"gitId":"TeoHaoZhi"},"content":"help","lastModifiedDate":"2023-10-10"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":220,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"TeoHaoZhi"},"content":"`help","lastModifiedDate":"2023-10-10"},{"lineNumber":223,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":224,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":225,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":226,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":227,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":228,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":229,"author":{"gitId":"TeoHaoZhi"},"content":"|| add: Adds a new drug to the drug list. Parameters: NAME, EXPIRY DATE, QUANTITY, ","lastModifiedDate":"2023-10-15"},{"lineNumber":230,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: add /n Doliprane /d 12/06/2035 /q 52","lastModifiedDate":"2023-10-15"},{"lineNumber":231,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":232,"author":{"gitId":"TeoHaoZhi"},"content":"|| delete: Removes a drug from drug list. Parameters: Name ","lastModifiedDate":"2023-10-15"},{"lineNumber":233,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: delete \u003cDrug Name\u003e","lastModifiedDate":"2023-10-15"},{"lineNumber":234,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":235,"author":{"gitId":"TeoHaoZhi"},"content":"|| help: Shows program usage instructions. ","lastModifiedDate":"2023-10-15"},{"lineNumber":236,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: help","lastModifiedDate":"2023-10-15"},{"lineNumber":237,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":238,"author":{"gitId":"TeoHaoZhi"},"content":"|| list: List all drug information that is being tracked by the system. ","lastModifiedDate":"2023-10-15"},{"lineNumber":239,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: list","lastModifiedDate":"2023-10-15"},{"lineNumber":240,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":241,"author":{"gitId":"Barbaracwx"},"content":"|| find: Finds drug in inventory using name or expiry date","lastModifiedDate":"2023-10-20"},{"lineNumber":242,"author":{"gitId":"Barbaracwx"},"content":"|| Example: find /n panadol","lastModifiedDate":"2023-10-20"},{"lineNumber":243,"author":{"gitId":"Barbaracwx"},"content":"|| Example: find /d sep","lastModifiedDate":"2023-10-20"},{"lineNumber":244,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":245,"author":{"gitId":"TeoHaoZhi"},"content":"|| bye: Exits the program.","lastModifiedDate":"2023-10-15"},{"lineNumber":246,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: bye","lastModifiedDate":"2023-10-15"},{"lineNumber":247,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":249,"author":{"gitId":"TeoHaoZhi"},"content":"### `register` - Register a new user into the system","lastModifiedDate":"2023-10-20"},{"lineNumber":250,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":251,"author":{"gitId":"TeoHaoZhi"},"content":"Asks for user input for a username and password field which","lastModifiedDate":"2023-10-20"},{"lineNumber":252,"author":{"gitId":"TeoHaoZhi"},"content":"will be used to create a new user for the system.","lastModifiedDate":"2023-10-20"},{"lineNumber":253,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":254,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":255,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-20"},{"lineNumber":256,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":257,"author":{"gitId":"TeoHaoZhi"},"content":"register","lastModifiedDate":"2023-10-20"},{"lineNumber":258,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":259,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":260,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-20"},{"lineNumber":261,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":262,"author":{"gitId":"TeoHaoZhi"},"content":"`register`","lastModifiedDate":"2023-10-20"},{"lineNumber":263,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":264,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-20"},{"lineNumber":265,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":266,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":267,"author":{"gitId":"TeoHaoZhi"},"content":"Registration Successful.","lastModifiedDate":"2023-10-20"},{"lineNumber":268,"author":{"gitId":"TeoHaoZhi"},"content":"New User Created.","lastModifiedDate":"2023-10-20"},{"lineNumber":269,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":270,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":271,"author":{"gitId":"TeoHaoZhi"},"content":"### `login` - login an existing user into the system","lastModifiedDate":"2023-10-20"},{"lineNumber":272,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":273,"author":{"gitId":"TeoHaoZhi"},"content":"Asks for user input for a username and password field which","lastModifiedDate":"2023-10-20"},{"lineNumber":274,"author":{"gitId":"TeoHaoZhi"},"content":"will be used to check if such a user exists for the system","lastModifiedDate":"2023-10-20"},{"lineNumber":275,"author":{"gitId":"TeoHaoZhi"},"content":"and log the user in.","lastModifiedDate":"2023-10-20"},{"lineNumber":276,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":277,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":278,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-20"},{"lineNumber":279,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":280,"author":{"gitId":"TeoHaoZhi"},"content":"login","lastModifiedDate":"2023-10-20"},{"lineNumber":281,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":282,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-20"},{"lineNumber":283,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":284,"author":{"gitId":"TeoHaoZhi"},"content":"`login`","lastModifiedDate":"2023-10-20"},{"lineNumber":285,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":286,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-20"},{"lineNumber":287,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":288,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":289,"author":{"gitId":"TeoHaoZhi"},"content":"Login Sucessful","lastModifiedDate":"2023-10-20"},{"lineNumber":290,"author":{"gitId":"TeoHaoZhi"},"content":"Welcome Back!","lastModifiedDate":"2023-10-20"},{"lineNumber":291,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":292,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":293,"author":{"gitId":"TeoHaoZhi"},"content":"### `save` - save existing drugs onto hard drive of computer","lastModifiedDate":"2023-10-21"},{"lineNumber":294,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":295,"author":{"gitId":"TeoHaoZhi"},"content":"Saves existing drugs onto hard drive of computer. The txt file","lastModifiedDate":"2023-10-21"},{"lineNumber":296,"author":{"gitId":"TeoHaoZhi"},"content":"is then used as reference to update drug inventory when stocker ","lastModifiedDate":"2023-10-21"},{"lineNumber":297,"author":{"gitId":"TeoHaoZhi"},"content":"is booted up.","lastModifiedDate":"2023-10-21"},{"lineNumber":298,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":299,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-21"},{"lineNumber":300,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":301,"author":{"gitId":"TeoHaoZhi"},"content":"save","lastModifiedDate":"2023-10-21"},{"lineNumber":302,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":303,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-21"},{"lineNumber":304,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":305,"author":{"gitId":"TeoHaoZhi"},"content":"`save`","lastModifiedDate":"2023-10-21"},{"lineNumber":306,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":307,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-21"},{"lineNumber":308,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":309,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-21"},{"lineNumber":310,"author":{"gitId":"TeoHaoZhi"},"content":"Drugs successfully saved.","lastModifiedDate":"2023-10-21"},{"lineNumber":311,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-21"},{"lineNumber":312,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":313,"author":{"gitId":"TeoHaoZhi"},"content":"### `addVendor` - adds a vendor into list of vendors being tracked by system","lastModifiedDate":"2023-10-29"},{"lineNumber":314,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":315,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a vendor to be tracked by the system. The enteries are used to form a list of summarised vendors.","lastModifiedDate":"2023-10-29"},{"lineNumber":316,"author":{"gitId":"TeoHaoZhi"},"content":"is booted up.","lastModifiedDate":"2023-10-29"},{"lineNumber":317,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":318,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":319,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":320,"author":{"gitId":"TeoHaoZhi"},"content":"addVendor DRUGNAME","lastModifiedDate":"2023-10-29"},{"lineNumber":321,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":322,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":323,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":324,"author":{"gitId":"TeoHaoZhi"},"content":"`addVendor Moderna`","lastModifiedDate":"2023-10-29"},{"lineNumber":325,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":326,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-29"},{"lineNumber":327,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":328,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":329,"author":{"gitId":"TeoHaoZhi"},"content":"New vendor added into the vendors list: Moderna","lastModifiedDate":"2023-10-29"},{"lineNumber":330,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":331,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":332,"author":{"gitId":"TeoHaoZhi"},"content":"### `listVendors` - list all vendors currently being tracked by the system","lastModifiedDate":"2023-10-29"},{"lineNumber":333,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":334,"author":{"gitId":"TeoHaoZhi"},"content":"Displays a list of all vendors currently being tracked by the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":335,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":336,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":337,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":338,"author":{"gitId":"TeoHaoZhi"},"content":"listVendors","lastModifiedDate":"2023-10-29"},{"lineNumber":339,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":340,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":341,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":342,"author":{"gitId":"TeoHaoZhi"},"content":"`listVendors`","lastModifiedDate":"2023-10-29"},{"lineNumber":343,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":344,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-29"},{"lineNumber":345,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":346,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":347,"author":{"gitId":"TeoHaoZhi"},"content":"|| 1. Name : Moderna","lastModifiedDate":"2023-10-29"},{"lineNumber":348,"author":{"gitId":"TeoHaoZhi"},"content":"||","lastModifiedDate":"2023-10-29"},{"lineNumber":349,"author":{"gitId":"TeoHaoZhi"},"content":"||Listed all vendors in the list.","lastModifiedDate":"2023-10-29"},{"lineNumber":350,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":351,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":353,"author":{"gitId":"TeoHaoZhi"},"content":"**Q**: Can i register with blank username and password","lastModifiedDate":"2023-10-17"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":355,"author":{"gitId":"TeoHaoZhi"},"content":"**A**: No. Ensure your entries are not blank.","lastModifiedDate":"2023-10-17"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":357,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":359,"author":{"gitId":"TeoHaoZhi"},"content":"* add : `add /n DRUG_NAME /d EXPIRY_DATE /q QUANTITY`","lastModifiedDate":"2023-10-10"},{"lineNumber":360,"author":{"gitId":"TeoHaoZhi"},"content":"* delete : `delete /n DRUG_NAME`","lastModifiedDate":"2023-10-10"},{"lineNumber":361,"author":{"gitId":"TeoHaoZhi"},"content":"* list : `list`","lastModifiedDate":"2023-10-10"},{"lineNumber":362,"author":{"gitId":"Barbaracwx"},"content":"* find : `find /n KEYWORD` or `find /d KEYWORD`","lastModifiedDate":"2023-10-20"},{"lineNumber":363,"author":{"gitId":"TeoHaoZhi"},"content":"* help : `help`","lastModifiedDate":"2023-10-10"},{"lineNumber":364,"author":{"gitId":"TeoHaoZhi"},"content":"* register : `register`","lastModifiedDate":"2023-10-20"},{"lineNumber":365,"author":{"gitId":"TeoHaoZhi"},"content":"* login : `login`","lastModifiedDate":"2023-10-20"},{"lineNumber":366,"author":{"gitId":"TeoHaoZhi"},"content":"* save : `save`","lastModifiedDate":"2023-10-21"},{"lineNumber":367,"author":{"gitId":"TeoHaoZhi"},"content":"* add Vendor : `addVendor`","lastModifiedDate":"2023-10-29"},{"lineNumber":368,"author":{"gitId":"TeoHaoZhi"},"content":"* list Vendor : `listVendors`","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"TeoHaoZhi":302,"-":31,"Barbaracwx":35}},{"path":"docs/team/Azfarul.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"azfarulmatin"},"content":"# Azfarul Matin - Project Portfolio Page","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"azfarulmatin"},"content":"## Overview","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"azfarulmatin"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"azfarulmatin":6}},{"path":"docs/team/Barbara.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"# Barbara Chong - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"Barbaracwx":6}},{"path":"docs/team/HaoZhi.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"# Hao Zhi - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"TeoHaoZhi":6}},{"path":"docs/team/Karishma.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"karishma-t"},"content":"# Karishma - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"karishma-t"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"karishma-t"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"karishma-t":5}},{"path":"docs/team/Martin.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"# Martin Schneider - Project Portfolio Page","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"## Overview","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"martinschnder":5}},{"path":"src/main/java/seedu/stocker/Stocker.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.authentication.LoginSystem;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.ui.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.parser.Parser;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.Command;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.ExitCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.VendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"public class Stocker {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" private Ui ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" private Inventory inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" private SalesList salesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" private Cart currentCart;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" private VendorsList vendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" private Storage storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public static void main(String[] launchArgs) throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" new Stocker().run();","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" * Runs Login System.","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" public boolean startLogin() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" ui.showLoginMessage();","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" LoginSystem system \u003d new LoginSystem();","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" system.run();","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"martinschnder"},"content":" return system.loginStatus;","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" * Runs the program until termination.","lastModifiedDate":"2023-10-11"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" public void run() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" start();","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" runCommandLoopUntilExitCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" exit();","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" * Sets up the required objects, and prints the welcome message.","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":" private void start() {","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"martinschnder"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" this.inventory \u003d new Inventory();","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"martinschnder"},"content":" this.salesList \u003d new SalesList();","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"martinschnder"},"content":" this.currentCart \u003d new Cart();","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" this.vendorsList \u003d new VendorsList();","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"martinschnder"},"content":" this.storage \u003d new Storage(inventory);","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" storage.loadFileContents(\"drugs.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":" boolean checker \u003d startLogin();","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" assert checker \u003d\u003d true;","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":" if(checker){","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"martinschnder"},"content":" ui.showInitFailedMessage();","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":" System.exit(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"martinschnder"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" * Prints the Goodbye message and exits.","lastModifiedDate":"2023-10-11"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":81,"author":{"gitId":"martinschnder"},"content":" private void exit() {","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"martinschnder"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"martinschnder"},"content":" System.exit(0);","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" * Reads the user command and executes it, until the user issues the exit command.","lastModifiedDate":"2023-10-11"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":" private void runCommandLoopUntilExitCommand() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"martinschnder"},"content":" Command command;","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"martinschnder"},"content":" do {","lastModifiedDate":"2023-10-09"},{"lineNumber":92,"author":{"gitId":"martinschnder"},"content":" String userCommandText \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":93,"author":{"gitId":"martinschnder"},"content":" command \u003d new Parser().parseCommand(userCommandText);","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"martinschnder"},"content":" CommandResult result \u003d executeCommand(command);","lastModifiedDate":"2023-10-09"},{"lineNumber":95,"author":{"gitId":"martinschnder"},"content":" ui.showResultToUser(result);","lastModifiedDate":"2023-10-09"},{"lineNumber":96,"author":{"gitId":"Barbaracwx"},"content":" assert !ExitCommand.isExit((command));","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"martinschnder"},"content":" } while (!ExitCommand.isExit(command));","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":103,"author":{"gitId":"martinschnder"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2023-10-09"},{"lineNumber":104,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":105,"author":{"gitId":"martinschnder"},"content":" * @param command user command","lastModifiedDate":"2023-10-09"},{"lineNumber":106,"author":{"gitId":"martinschnder"},"content":" * @return result of the command","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":" private CommandResult executeCommand(Command command) throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"martinschnder"},"content":" command.setData(inventory, salesList, currentCart);","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"martinschnder"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-09"},{"lineNumber":111,"author":{"gitId":"martinschnder"},"content":" return result;","lastModifiedDate":"2023-10-09"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":113,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"martinschnder":64,"TeoHaoZhi":42,"-":6,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/authentication/LoginSystem.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.authentication;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.ui.Ui;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" * Represents a login system used for authentication of users.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" * User information is saved within a hashtable and uploaded","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" * into txt file for future reference.","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"public class LoginSystem {","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" public boolean loginStatus;","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" private Ui interactor;","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" private final HashMap\u003cString, String\u003e users;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public LoginSystem() throws IOException {","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" users \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" loginStatus \u003d false;","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" this.in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" interactor \u003d new Ui();","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" File holder \u003d new File(\"./users.txt\");","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" if (!holder.exists()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" holder.createNewFile();","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" * Returns user choice of whether they wish to register a new user","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" * or if they would want to login using an existing user.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":" * @return choice of user to login or register","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws StockerException if register or login is not inputted","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" public String authenticateUserChoice() throws StockerException{","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" try {","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":" while (in.hasNextLine()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":" String choice \u003d in.nextLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":" if (choice.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":" return \"register\";","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (choice.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"TeoHaoZhi"},"content":" return \"login\";","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":" throw new StockerException();","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":" } catch (StockerException e) {","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showInvalidChoiceMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":" return authenticateUserChoice();","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":" return \"error\";","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":" * Creates a new user with input username and password from user.","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":" * Username and password are saved into a txt file for future","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":" * reference.","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if inappropriate output is entered.","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":" public void newUserCreator() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showUsernameMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" String username \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" while (username.equals(\"\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showBlankNameMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" username \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":" String password \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" while (password.equals(\"\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showBlankPasswordMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":" password \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" assert(username.equals(\"\") \u003d\u003d false);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" assert (password.equals(\"\") \u003d\u003d false);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":" if (users.containsKey(username)) {","lastModifiedDate":"2023-10-11"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showUserAlreadyExistMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":" System.out.println();","lastModifiedDate":"2023-10-11"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showEnterChoiceAgainMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":99,"author":{"gitId":"TeoHaoZhi"},"content":" String reselect \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":100,"author":{"gitId":"TeoHaoZhi"},"content":" if (reselect.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":103,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":104,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (reselect.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":106,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":107,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":" users.put(username, password);","lastModifiedDate":"2023-10-11"},{"lineNumber":109,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showSuccessfulRegistrationMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"TeoHaoZhi"},"content":" loginStatus \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":111,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":112,"author":{"gitId":"TeoHaoZhi"},"content":" writeNewUserToFile();","lastModifiedDate":"2023-10-11"},{"lineNumber":113,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":114,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":115,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":116,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"TeoHaoZhi"},"content":" * Login existing user by asking for username and password input","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"TeoHaoZhi"},"content":" * from user.","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if inappropriate input is entered.","lastModifiedDate":"2023-10-14"},{"lineNumber":121,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":122,"author":{"gitId":"TeoHaoZhi"},"content":" public void loginExistingUser() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":123,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":124,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":125,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showUsernameMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":126,"author":{"gitId":"TeoHaoZhi"},"content":" String usernameInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":128,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":129,"author":{"gitId":"TeoHaoZhi"},"content":" String passwordInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":131,"author":{"gitId":"TeoHaoZhi"},"content":" if (!users.containsKey(usernameInput)) {","lastModifiedDate":"2023-10-11"},{"lineNumber":132,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showInvalidUsernameOrPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":133,"author":{"gitId":"TeoHaoZhi"},"content":" System.out.println();","lastModifiedDate":"2023-10-11"},{"lineNumber":134,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showEnterChoiceAgainMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":135,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":136,"author":{"gitId":"TeoHaoZhi"},"content":" String reselect \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":137,"author":{"gitId":"TeoHaoZhi"},"content":" if (reselect.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":138,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":139,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":140,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (reselect.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":142,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":143,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":144,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":145,"author":{"gitId":"TeoHaoZhi"},"content":" if (users.get(usernameInput).equals(passwordInput)) {","lastModifiedDate":"2023-10-11"},{"lineNumber":146,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showSuccessfulLoginMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":147,"author":{"gitId":"TeoHaoZhi"},"content":" loginStatus \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":148,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":149,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showInvalidUsernameOrPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":150,"author":{"gitId":"TeoHaoZhi"},"content":" System.out.println();","lastModifiedDate":"2023-10-11"},{"lineNumber":151,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showEnterChoiceAgainMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":152,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":153,"author":{"gitId":"TeoHaoZhi"},"content":" String reselect \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":154,"author":{"gitId":"TeoHaoZhi"},"content":" if (reselect.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":155,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":156,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":157,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (reselect.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":158,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":159,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":160,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":161,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":162,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":163,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":165,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":166,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":167,"author":{"gitId":"TeoHaoZhi"},"content":" * Writes new user creation into a txt file to save for future reference","lastModifiedDate":"2023-10-14"},{"lineNumber":168,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":169,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException","lastModifiedDate":"2023-10-14"},{"lineNumber":170,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":171,"author":{"gitId":"TeoHaoZhi"},"content":" public void writeNewUserToFile() throws IOException {","lastModifiedDate":"2023-10-11"},{"lineNumber":172,"author":{"gitId":"TeoHaoZhi"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(\"./users.txt\", true));","lastModifiedDate":"2023-10-11"},{"lineNumber":173,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":174,"author":{"gitId":"TeoHaoZhi"},"content":" for (Map.Entry\u003cString, String\u003e entry :","lastModifiedDate":"2023-10-11"},{"lineNumber":175,"author":{"gitId":"TeoHaoZhi"},"content":" users.entrySet()) {","lastModifiedDate":"2023-10-11"},{"lineNumber":176,"author":{"gitId":"TeoHaoZhi"},"content":" // put key and value separated by a colon","lastModifiedDate":"2023-10-11"},{"lineNumber":177,"author":{"gitId":"TeoHaoZhi"},"content":" writer.write(entry.getKey() + \":\"","lastModifiedDate":"2023-10-11"},{"lineNumber":178,"author":{"gitId":"TeoHaoZhi"},"content":" + entry.getValue());","lastModifiedDate":"2023-10-11"},{"lineNumber":179,"author":{"gitId":"TeoHaoZhi"},"content":" // new line","lastModifiedDate":"2023-10-11"},{"lineNumber":180,"author":{"gitId":"TeoHaoZhi"},"content":" writer.newLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":181,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":182,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":183,"author":{"gitId":"TeoHaoZhi"},"content":" writer.flush();","lastModifiedDate":"2023-10-11"},{"lineNumber":184,"author":{"gitId":"TeoHaoZhi"},"content":" writer.close();","lastModifiedDate":"2023-10-11"},{"lineNumber":185,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":186,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":187,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":188,"author":{"gitId":"TeoHaoZhi"},"content":" * Loads existing users from txt file into hash table","lastModifiedDate":"2023-10-14"},{"lineNumber":189,"author":{"gitId":"TeoHaoZhi"},"content":" * for login system to use for authentication when","lastModifiedDate":"2023-10-14"},{"lineNumber":190,"author":{"gitId":"TeoHaoZhi"},"content":" * user tries to login.","lastModifiedDate":"2023-10-14"},{"lineNumber":191,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":192,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if fail to read from txt file","lastModifiedDate":"2023-10-14"},{"lineNumber":193,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":194,"author":{"gitId":"TeoHaoZhi"},"content":" public void loadExistingUsers() throws IOException {","lastModifiedDate":"2023-10-11"},{"lineNumber":195,"author":{"gitId":"TeoHaoZhi"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(\"./users.txt\"));","lastModifiedDate":"2023-10-11"},{"lineNumber":196,"author":{"gitId":"TeoHaoZhi"},"content":" String line;","lastModifiedDate":"2023-10-11"},{"lineNumber":197,"author":{"gitId":"TeoHaoZhi"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-10-11"},{"lineNumber":198,"author":{"gitId":"TeoHaoZhi"},"content":" String[] parts \u003d line.split(\":\", 2);","lastModifiedDate":"2023-10-11"},{"lineNumber":199,"author":{"gitId":"TeoHaoZhi"},"content":" if (parts.length \u003e\u003d 2) {","lastModifiedDate":"2023-10-11"},{"lineNumber":200,"author":{"gitId":"TeoHaoZhi"},"content":" String key \u003d parts[0];","lastModifiedDate":"2023-10-11"},{"lineNumber":201,"author":{"gitId":"TeoHaoZhi"},"content":" String value \u003d parts[1];","lastModifiedDate":"2023-10-11"},{"lineNumber":202,"author":{"gitId":"TeoHaoZhi"},"content":" users.put(key, value);","lastModifiedDate":"2023-10-11"},{"lineNumber":203,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":204,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":205,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":206,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":207,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":208,"author":{"gitId":"TeoHaoZhi"},"content":" * Runs login system by loading user information into hash table","lastModifiedDate":"2023-10-14"},{"lineNumber":209,"author":{"gitId":"TeoHaoZhi"},"content":" * and get input for user to check for authentication.","lastModifiedDate":"2023-10-14"},{"lineNumber":210,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":211,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if unable to read from txt file to","lastModifiedDate":"2023-10-14"},{"lineNumber":212,"author":{"gitId":"TeoHaoZhi"},"content":" * load users","lastModifiedDate":"2023-10-14"},{"lineNumber":213,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":214,"author":{"gitId":"TeoHaoZhi"},"content":" public void run() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":215,"author":{"gitId":"TeoHaoZhi"},"content":" loadExistingUsers();","lastModifiedDate":"2023-10-11"},{"lineNumber":216,"author":{"gitId":"TeoHaoZhi"},"content":" String choice \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":217,"author":{"gitId":"TeoHaoZhi"},"content":" if (choice.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":218,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":219,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":220,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (choice.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":221,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":222,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":223,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":224,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":225,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":226,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"TeoHaoZhi":226}},{"path":"src/main/java/seedu/stocker/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" * Adds a drug into the inventory","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a new drug to the drug list. \"","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Parameters: NAME, EXPIRY DATE, QUANTITY, \" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" + \" /n Doliprane /d 12/06/2035 /q 52\";","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New drug added in the inventory: %1$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" private final Drug toAdd;","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" private final long quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" public AddCommand(String name, String expiryDate, Long quantity) {","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.toAdd \u003d new Drug(name, expiryDate);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" public Drug getDrug() {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" return this.toAdd;","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" inventory.addNewDrug(toAdd.getName(), toAdd, quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS, toAdd.getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":33,"TeoHaoZhi":2,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/AddToCartCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" * Adds a certain quantity of one drug into the current cart","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"public class AddToCartCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"addtocart\";","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD ","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" + \": Adds a new drug to the current cart. \"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" + \"Parameters: NAME, QUANTITY,\" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" + \" /n Doliprane /q 2\";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New drug added in the current cart: %1$s\";","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" private final String drugName;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" private final long quantity;","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public AddToCartCommand(String name, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.drugName \u003d name;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" StockEntry matchingEntry \u003d inventory.getStockEntries().stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" .filter(entry -\u003e entry","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" .getDrug().getName()","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" .equalsIgnoreCase(this.drugName) \u0026\u0026 ","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" entry.getQuantity() \u003e this.quantity)","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" .findAny()","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" .orElse(null);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" if (matchingEntry !\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" currentCart.addEntry(this.drugName, this.quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS, matchingEntry.getDrug().getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(\"This drug is not in stock. \");","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":40,"TeoHaoZhi":1,"Barbaracwx":4}},{"path":"src/main/java/seedu/stocker/commands/AddVendorCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.Vendor;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.VendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":" * Adds a vendor into the inventory","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"public class AddVendorCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"addVendor\";","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a new vendor to the vendors list. \"","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Parameter: NAME\" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + \" Moderna\";","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New vendor added in the vendors list: %1$s\";","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" private final Vendor toAdd;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" public AddVendorCommand(String name) {","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" this.toAdd \u003d new Vendor(name);","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" VendorsList.addNewVendor(toAdd);","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd.getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":31}},{"path":"src/main/java/seedu/stocker/commands/CheckOutCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" * Remove a drug from inventory and add it into the sales list","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"public class CheckOutCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"checkout\";","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Checks out current cart. \"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" + \"Parameters:\" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"The current cart has been checked out. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public CheckOutCommand() {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" currentCart.checkOut(salesList, inventory);","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS));","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":22,"TeoHaoZhi":1,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" protected Inventory inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" protected SalesList salesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" protected Cart currentCart;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" protected Command() {","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" public void setData(Inventory inventory, SalesList salesList, Cart currentCart) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" this.inventory \u003d inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" this.salesList \u003d salesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.currentCart \u003d currentCart;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" public abstract CommandResult execute() throws IOException, StockerException;","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":24,"TeoHaoZhi":5}},{"path":"src/main/java/seedu/stocker/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"// import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"public class CommandResult\u003cT\u003e {","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" * The feedback message to be shown to the user. Contains a description of the execution result","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":" * The list of drugs that was produced by the command","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" private final List\u003cT\u003e relevantElements;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public CommandResult(String feedbackToUser) {","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" relevantElements \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" public CommandResult(String feedbackToUser, List\u003cT\u003e relevantElements) {","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" this.relevantElements \u003d relevantElements;","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" * Returns a list of drugs that was produced by the command, if any.","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" public Optional\u003cList\u003cT\u003e\u003e getRelevantElements() {","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" return Optional.ofNullable(relevantElements);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" public String getFeedbackToUserFindTest() {","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" if (relevantElements !\u003d null) {","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" StringBuilder feedback \u003d new StringBuilder();","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":" for (int i \u003d 0; i \u003c relevantElements.size(); i++) {","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(i + 1).append(\". \").append(relevantElements.get(i));","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(System.lineSeparator());","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(System.lineSeparator());","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(feedbackToUser);","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"Barbaracwx"},"content":" return feedback.toString();","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"Barbaracwx"},"content":" return feedbackToUser;","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":34,"Barbaracwx":21}},{"path":"src/main/java/seedu/stocker/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.exceptions.DrugNotFoundException;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Removes a drug from drug list. \"","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Parameters: Name \" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \" \u003cDrug Name\u003e\";","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Drug removed from inventory: %1$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_FAILURE \u003d \"Drug not find in the inventory. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" private final String keyToDelete;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"karishma-t"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"karishma-t"},"content":" * Constructs a DeleteCommand with the specified drug name.","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"karishma-t"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"karishma-t"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" public DeleteCommand(String key) {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" this.keyToDelete \u003d key.trim().toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"karishma-t"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"karishma-t"},"content":" * Executes the \u0027delete\u0027 command, removing a drug from the inventory list by name.","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"karishma-t"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"karishma-t"},"content":" * @return A CommandResult indicating the result of the deletion operation.","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"karishma-t"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" StockEntry deletedEntry \u003d inventory.deleteDrug(this.keyToDelete);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS, deletedEntry.getDrug().getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" } catch (DrugNotFoundException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_FAILURE);","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"karishma-t"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"karishma-t":14,"martinschnder":9,"TeoHaoZhi":19,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" * Terminates the program.","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Exits the program.\"+ System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_EXIT_ACKNOWEDGEMENT \u003d \"Exiting Stocker as requested ...\";","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_EXIT_ACKNOWEDGEMENT);","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" return command instanceof ExitCommand; // instanceof returns false if it is null","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":19,"TeoHaoZhi":2,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" * Represents a command to find drugs in the inventory that match a given keyword.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" * Usage message for the \u0027find\u0027 command.","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \" /n\" + \": Finds drug in inventory using name.\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" \"Example: \" + COMMAND_WORD + \" /n panadol\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" COMMAND_WORD + \" /d\" + \": Finds drug in inventory using date.\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" \"Example: \" + COMMAND_WORD + \" /d panadol\" ;","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" * Success message displayed after successfully finding drugs in the inventory.","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all drugs with the keyword in the inventory.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":" private final String keyword;","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" private final String criterion;","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" * Creates a FindCommand with the specified keyword.","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" * @param keyword The keyword to search for in the inventory.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" public FindCommand(String keyword, String criterion) {","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":" this.keyword \u003d keyword.toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" this.criterion \u003d criterion;","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":" private static boolean matches(String criterion, String keyword, StockEntry entry) {","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" if (criterion.equals(\"/n\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" return entry.getDrug().getName().toLowerCase().contains(keyword);","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" return entry.getDrug().getExpiryDate().toLowerCase().contains(keyword);","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"Barbaracwx"},"content":" * Executes the \u0027find\u0027 command, searching for drugs that match the keyword.","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"Barbaracwx"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"Barbaracwx"},"content":" * @return A CommandResult containing the outcome of the command execution.","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"Barbaracwx"},"content":" if (keyword \u003d\u003d null || keyword.trim().isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_INVALID_COMMAND_FORMAT, MESSAGE_USAGE));","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e entries \u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e foundEntries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" for (StockEntry entry : entries) {","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" if (matches(this.criterion, this.keyword, entry)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" foundEntries.add(entry);","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, foundEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":15,"TeoHaoZhi":12,"Barbaracwx":52}},{"path":"src/main/java/seedu/stocker/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Shows help instructions.","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Shows program usage instructions. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" System.lineSeparator() + AddCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + DeleteCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + HelpCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + ListCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" + System.lineSeparator() + ShowStockLevelCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + FindCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator() + AddToCartCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator() + CheckOutCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator() + ViewCartCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + LoginCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + RegisterCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + SaveCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + AddVendorCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + ListVendorCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + ExitCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":" );","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":21,"TeoHaoZhi":25,"Barbaracwx":3}},{"path":"src/main/java/seedu/stocker/commands/IncorrectCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Represents an incorrect command. Upon execution, produces some feedback to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public IncorrectCommand(String feedbackToUser) {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(feedbackToUser);","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":17,"TeoHaoZhi":1,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"azfarulmatin"},"content":"import java.util.List;","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"azfarulmatin"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"azfarulmatin"},"content":" * Represents a command to list all drugs in the inventory.","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"azfarulmatin"},"content":" * This command retrieves the list of drugs from the inventory and provides it as part of the command result.","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"azfarulmatin"},"content":" * If the inventory is empty, it informs the user that the inventory has no drugs.","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"azfarulmatin"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": List all drug information that is being \"","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + \"tracked by the system. \" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"azfarulmatin"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all drugs in the inventory.\";","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"azfarulmatin"},"content":" * Executes the list command.","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"azfarulmatin"},"content":" * @return A CommandResult containing the success message and the list of drugs.","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"azfarulmatin"},"content":" // Assertion: Check if the inventory is properly initialised","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"azfarulmatin"},"content":" assert inventory !\u003d null : \"Inventory should be initialised before executing ListCommand.\";","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"azfarulmatin"},"content":" // Retrieve the list of drugs from the inventory","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e stockEntries \u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"azfarulmatin"},"content":" // Check if the inventory is empty","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" if (stockEntries.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"azfarulmatin"},"content":" // Return a CommandResult indicating that the inventory is empty","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(\"The inventory is empty.\");","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"azfarulmatin"},"content":" } else {","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"azfarulmatin"},"content":" // Return a CommandResult with the success message and the list of drugs","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, stockEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":3,"azfarulmatin":25,"TeoHaoZhi":13,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/ListVendorCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.Vendor;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.VendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" * Generates a list of vendors tracked by system","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"public class ListVendorCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"listVendors\";","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": List all vendor information that is being \"","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + \"tracked by the system.\" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all vendors in the list.\";","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" * Executes the list command.","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" * @return A CommandResult containing the success message and the list of drugs.","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" // Retrieve the list of drugs from the inventory","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" List\u003cVendor\u003e vendorEntries \u003d VendorsList.getVendorEntries();","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" // Check if the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" if (vendorEntries.isEmpty()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" // Return a CommandResult indicating that the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" return new CommandResult\u003c\u003e(\"The inventory is empty.\");","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" // Return a CommandResult with the success message and the list of drugs","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, vendorEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":40}},{"path":"src/main/java/seedu/stocker/commands/LoginCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.authentication.LoginSystem;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" * Login existing user into system.","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"public class LoginCommand extends Command {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"login\";","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Login new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Welcome back!\" ;","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() throws IOException, StockerException {","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" LoginSystem system \u003d new LoginSystem();","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" system.loadExistingUsers();","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" system.loginExistingUser();","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS);","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"TeoHaoZhi":28,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/RegisterCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.authentication.LoginSystem;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" * Registers new user into login system.","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"public class RegisterCommand extends Command {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"register\";","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Register new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New User Created.\";","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() throws IOException, StockerException {","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" LoginSystem system \u003d new LoginSystem();","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" system.loadExistingUsers();","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" system.newUserCreator();","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS);","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"TeoHaoZhi":26,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/SaveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.List;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" * Backups existing drug list inventory into txt file to be uploaded later.","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"public class SaveCommand extends Command{","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"save\";","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Saves existing druglist that is loaded \"","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" +\"into inventory when system is booted up.\"","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Drugs successfully saved.\";","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() throws IOException {","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" File holder \u003d new File(\"./drugs.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" if (!holder.exists()) {","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" holder.createNewFile();","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e entries\u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" Storage storageManager \u003d new Storage(inventory);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" storageManager.writeToFile(\"drugs.txt\", \"\");","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" for(int i \u003d 0; i \u003c entries.size(); i +\u003d 1){","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" storageManager.appendToFile(\"drugs.txt\",entries.get(i).toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"martinschnder":5,"TeoHaoZhi":33,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/ShowStockLevelCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"/**","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":" * Represents a command to display a report of stock levels sorted by quantity in ascending order.","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"public class ShowStockLevelCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" public static final String COMMAND_WORD \u003d \"stocklevel\";","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": List all drugs by quantity level \"","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" + \"tracked by the system in ascending order. \" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Stock Level Report (Sorted by Quantity)\";","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" * Executes the \"stocklevel\" command. Displays a report of stock levels sorted by quantity in ascending order.","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" * @return A CommandResult containing the success message and a list of stock entries sorted by quantity.","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" // Assertion: Check if the inventory is properly initialized","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":" assert inventory !\u003d null : \"Inventory should be initialized before executing ShowStockLevelCommand.\";","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" // Retrieve the list of drugs from the inventory","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"Barbaracwx"},"content":" List\u003cStockEntry\u003e stockEntries \u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" // Check if the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" if (stockEntries.isEmpty()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" // Return a CommandResult indicating that the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(\"The inventory is empty.\");","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" // Sort the stockEntries by quantity in ascending order","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" stockEntries.sort(Comparator.comparingLong(StockEntry::getQuantity));","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" // Create a new list to store the sorted stockEntries","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" List\u003cStockEntry\u003e arrangedListbyQuantity \u003d new ArrayList\u003c\u003e(stockEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, arrangedListbyQuantity);","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":1,"Barbaracwx":46}},{"path":"src/main/java/seedu/stocker/commands/ViewCartCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" * Represents a command to list all drugs in the current cart.","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" * This command retrieves the list of drugs from the current cart and provides it as part of the command result.","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" * If the inventory is empty, it informs the user that the inventory has no drugs.","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"public class ViewCartCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"viewcart\";","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" + \": View the current cart items.\" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all the content of your cart. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_FAILURE \u003d \"Your cart is empty. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" * Execute the ViewCartCommand","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" if (currentCart.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_FAILURE);","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" return new CommandResult(MESSAGE_SUCCESS, currentCart.getCurrentCart());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":29,"TeoHaoZhi":1,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/common/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.common;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Container for user visible messages.","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class Messages {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_WELCOME \u003d \"Welcome to your Stocker!\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_GOODBYE \u003d \"Good bye!\";","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_LOGIN_WELCOME \u003d \"Welcome! \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Key in register or login based on your needs \\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \"1.Register user \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" + \"2.Login\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USERNAME_INPUT \u003d \"Enter your username:\";","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_PASSWORD_INPUT \u003d \"Enter Your Password:\";","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESSFUL_REGISTRATION \u003d \"Registration successful.\";","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESSFUL_LOGIN \u003d \"Login successful.\";","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_INVALID_CHOICE \u003d \"Invalid Input, enter register or login only!\";","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USER_ALREADY_EXIST \u003d \"User already exists. Please make user with \"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" + \"different name or login instead\";","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_INVALID_USERNAME_OR_PASSWORD \u003d \"Invalid username or password. Please try again.\";","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_NO_BLANK_NAME_ALLOWED \u003d \"No blank name allowed. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Enter your desired username again\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_NO_BLANK_PASSWORD_ALLOWED \u003d \"No blank password allowed. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Enter your desired password again\";","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_INIT_FAILED \u003d \"Failed to initialise Stocker application. Exiting...\";","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":13,"TeoHaoZhi":16}},{"path":"src/main/java/seedu/stocker/drugs/Cart.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class Cart {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" private ArrayList\u003cCartEntry\u003e entries;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public Cart() {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.entries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public void addEntry(String key, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" this.entries.add(new CartEntry(key, quantity));","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public List\u003cCartEntry\u003e getCurrentCart() {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" return this.entries;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" return entries.isEmpty();","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" public void checkOut(SalesList salesList, Inventory inventory) {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" salesList.addSale(this);","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" for (CartEntry entry : entries) {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" inventory.removeFromStock(entry.getKey(), entry.getQuantity());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" this.entries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":32}},{"path":"src/main/java/seedu/stocker/drugs/CartEntry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"public class CartEntry {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" private String key;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" private long quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public CartEntry(String key, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" this.key \u003d key;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public String getKey() {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" return this.key;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public long getQuantity() {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" return this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" * Returns a string representation of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" * @return A string containing the key and quantity date of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" public String toString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" return \"Key: \" + this.key","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" + \", Quantity: \" + this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":31}},{"path":"src/main/java/seedu/stocker/drugs/Drug.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"public class Drug {","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":" public String name;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":" String expiryDate;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public Drug(String name, String expiryDate) {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.expiryDate \u003d expiryDate;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"azfarulmatin"},"content":" * Gets the name of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"azfarulmatin"},"content":" * @return The name of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"azfarulmatin"},"content":" public String getName() {","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"azfarulmatin"},"content":" return name;","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"azfarulmatin"},"content":" * Sets the name of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"azfarulmatin"},"content":" * @param name The new name to set for the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"azfarulmatin"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"azfarulmatin"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"azfarulmatin"},"content":" * Gets the expiry date of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"azfarulmatin"},"content":" * @return The expiry date of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"azfarulmatin"},"content":" public String getExpiryDate() {","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"azfarulmatin"},"content":" return expiryDate;","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"azfarulmatin"},"content":" * Sets the expiry date of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"azfarulmatin"},"content":" * @param expiryDate The new expiry date to set for the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"azfarulmatin"},"content":" public void setExpiryDate(String expiryDate) {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"azfarulmatin"},"content":" this.expiryDate \u003d expiryDate;","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"azfarulmatin"},"content":" * Returns a string representation of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" * @return A string containing the name and expiry date of the drug.","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"azfarulmatin"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"azfarulmatin"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":" return \"Name: \" + name + \", Expiry Date: \" + expiryDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"martinschnder":5,"azfarulmatin":43,"TeoHaoZhi":11}},{"path":"src/main/java/seedu/stocker/drugs/Inventory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"import java.util.List;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.exceptions.DrugNotFoundException;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"public class Inventory {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" public HashMap\u003cString, StockEntry\u003e stock;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public Inventory() {","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" this.stock \u003d new HashMap\u003cString, StockEntry\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public void addNewDrug(String key, Drug drug, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" this.stock.put(key, new StockEntry(drug, quantity));","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" public void removeFromStock(String key, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.stock.get(key).decrQuantity(quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" public List\u003cStockEntry\u003e getStockEntries() {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" return this.stock.values().stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" .collect(Collectors.toCollection(ArrayList::new));","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" public StockEntry deleteDrug(String key) throws DrugNotFoundException {","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" if (this.stock.containsKey(key)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" return stock.remove(key);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" throw new DrugNotFoundException(\"\");","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":35,"azfarulmatin":3}},{"path":"src/main/java/seedu/stocker/drugs/SalesList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class SalesList {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" private ArrayList\u003cCart\u003e validatedCarts;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public SalesList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" this.validatedCarts \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public void addSale(Cart cart) {","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" this.validatedCarts.add(cart);","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public List\u003cCart\u003e getAllSales() {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" return this.validatedCarts;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":22}},{"path":"src/main/java/seedu/stocker/drugs/StockEntry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"public class StockEntry {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":" private final Drug drug;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" private long quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public StockEntry(Drug drug, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.drug \u003d drug;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public Drug getDrug() {","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" return this.drug;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public long getQuantity() {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" return this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" public void setQuantity(long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" public void incrQuantity(long delta) {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" this.quantity +\u003d delta;","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" public void decrQuantity(long delta) {","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" assert(this.quantity \u003e delta);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" this.quantity -\u003d delta;","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" * Returns a string representation of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" * @return A string containing the key and quantity date of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"martinschnder"},"content":" public String toString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"martinschnder"},"content":" return \"Name: \" + this.drug.getName()","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":" + \", Expiry date: \" + this.drug.getExpiryDate()","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":" + \", Quantity: \" + this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":45,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/exceptions/DrugNotFoundException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.exceptions;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Signals that the drug has not been found in a specific list.","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class DrugNotFoundException extends Exception {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" public DrugNotFoundException(String message) {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" super(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":10}},{"path":"src/main/java/seedu/stocker/exceptions/InvalidDrugFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.exceptions;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Signals that the laod function cannot read the serialized drug.","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class InvalidDrugFormatException extends Exception {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" public InvalidDrugFormatException(String message) {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" super(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":10}},{"path":"src/main/java/seedu/stocker/exceptions/StockerException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.exceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"public class StockerException extends Exception{","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"TeoHaoZhi":4}},{"path":"src/main/java/seedu/stocker/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.parser;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.AddCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.Command;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.DeleteCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.ExitCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.FindCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.HelpCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.IncorrectCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.ListCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.LoginCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.RegisterCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.SaveCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.AddVendorCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.ShowStockLevelCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.ViewCartCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.AddToCartCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.CheckOutCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.ListVendorCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"public class Parser {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public Parser() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" * @param userInput full user input string","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" * @return the command based on the user input","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" public Command parseCommand(String userInput) throws IOException {","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" String[] words \u003d userInput.trim().split(\" \", 2); // split the input into command and arguments","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":" if (words.length \u003d\u003d 0) {","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":" final String commandWord \u003d words[0];","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":" final String arguments \u003d userInput.replaceFirst(commandWord, \"\").trim();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"martinschnder"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" case AddCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" return prepareAddCommand(arguments);","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"Barbaracwx"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Barbaracwx"},"content":" return prepareFindCommand(arguments);","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":" case AddToCartCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" return prepareAddToCartCommand(arguments);","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"karishma-t"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"karishma-t"},"content":" return new DeleteCommand(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" case CheckOutCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"martinschnder"},"content":" return new CheckOutCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"martinschnder"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"martinschnder"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"martinschnder"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"martinschnder"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"azfarulmatin"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"azfarulmatin"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"azfarulmatin"},"content":" ","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"martinschnder"},"content":" case ViewCartCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":" return new ViewCartCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":" case RegisterCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-20"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" return new RegisterCommand();","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":" case LoginCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" return new LoginCommand();","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" case SaveCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":" ","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":" case AddVendorCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":" return prepareAddVendorCommand(arguments);","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"Barbaracwx"},"content":" case ShowStockLevelCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"Barbaracwx"},"content":" return new ShowStockLevelCommand();","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":" case ListVendorCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" return new ListVendorCommand();","lastModifiedDate":"2023-10-28"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":93,"author":{"gitId":"martinschnder"},"content":" default:","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-09"},{"lineNumber":95,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":96,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":97,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"martinschnder"},"content":" * Parses arguments in the context of the add drug command.","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"martinschnder"},"content":" * @param args full command args string","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"martinschnder"},"content":" * @return the prepared command","lastModifiedDate":"2023-10-09"},{"lineNumber":103,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":104,"author":{"gitId":"martinschnder"},"content":" private Command prepareAddCommand(String args) {","lastModifiedDate":"2023-10-09"},{"lineNumber":105,"author":{"gitId":"martinschnder"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"martinschnder"},"content":" Pattern pattern \u003d Pattern.compile(\"/n (.*) /d (.*) /q (.*)\");","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"martinschnder"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-10-09"},{"lineNumber":108,"author":{"gitId":"martinschnder"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 3) {","lastModifiedDate":"2023-10-09"},{"lineNumber":109,"author":{"gitId":"martinschnder"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-09"},{"lineNumber":110,"author":{"gitId":"martinschnder"},"content":" String expiryDate \u003d matcher.group(2);","lastModifiedDate":"2023-10-09"},{"lineNumber":111,"author":{"gitId":"martinschnder"},"content":" Long quantity \u003d Long.parseLong(matcher.group(3));","lastModifiedDate":"2023-10-09"},{"lineNumber":112,"author":{"gitId":"martinschnder"},"content":" return new AddCommand(name, expiryDate, quantity);","lastModifiedDate":"2023-10-09"},{"lineNumber":113,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":114,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-09"},{"lineNumber":115,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":116,"author":{"gitId":"martinschnder"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":120,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"martinschnder"},"content":" * Parses arguments in the context of the add drug to cart command.","lastModifiedDate":"2023-10-23"},{"lineNumber":123,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"martinschnder"},"content":" * @param args full command args string","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"martinschnder"},"content":" * @return the prepared command","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"martinschnder"},"content":" private Command prepareAddToCartCommand(String args) {","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"martinschnder"},"content":" Pattern pattern \u003d Pattern.compile(\"/n (.*) /q (.*)\");","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"martinschnder"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"martinschnder"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 2) {","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"martinschnder"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"Barbaracwx"},"content":" long quantity \u003d Long.parseLong(matcher.group(2));","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"martinschnder"},"content":" return new AddToCartCommand(name, quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":138,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":139,"author":{"gitId":"Barbaracwx"},"content":" private Command prepareFindCommand(String args) {","lastModifiedDate":"2023-10-20"},{"lineNumber":140,"author":{"gitId":"Barbaracwx"},"content":" String[] findArgs \u003d args.split(\" \", 2);","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"author":{"gitId":"Barbaracwx"},"content":" if (findArgs.length \u003d\u003d 2) {","lastModifiedDate":"2023-10-20"},{"lineNumber":142,"author":{"gitId":"Barbaracwx"},"content":" String criterion \u003d findArgs[0];","lastModifiedDate":"2023-10-20"},{"lineNumber":143,"author":{"gitId":"Barbaracwx"},"content":" String keyword \u003d findArgs[1];","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"Barbaracwx"},"content":" if (criterion.equals(\"/n\") || criterion.equals(\"/d\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":145,"author":{"gitId":"Barbaracwx"},"content":" return new FindCommand(keyword, criterion);","lastModifiedDate":"2023-10-20"},{"lineNumber":146,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":147,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-20"},{"lineNumber":148,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":149,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":150,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-20"},{"lineNumber":151,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":152,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":153,"author":{"gitId":"TeoHaoZhi"},"content":" private Command prepareAddVendorCommand (String args) throws IOException {","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"TeoHaoZhi"},"content":" String[] vendorArgs \u003d args.split(\" \",1);","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"TeoHaoZhi"},"content":" String vendorName \u003d vendorArgs[0];","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"TeoHaoZhi"},"content":" try {","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"TeoHaoZhi"},"content":" if (vendorName.equals(null) || vendorName.equals(\"\") || vendorName.equals(\" \")) {","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"TeoHaoZhi"},"content":" throw new IOException();","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"TeoHaoZhi"},"content":" } catch(Exception invalidInput){","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"TeoHaoZhi"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT,AddVendorCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"TeoHaoZhi"},"content":" return new AddVendorCommand(vendorName);","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"karishma-t":4,"martinschnder":86,"azfarulmatin":4,"TeoHaoZhi":39,"Barbaracwx":32}},{"path":"src/main/java/seedu/stocker/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.storage;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.exceptions.InvalidDrugFormatException;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" * Represents an object to handle writing to txt files and appending to them.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"public class Storage {","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" private Inventory inventory;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public Storage(Inventory inventory) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.inventory \u003d inventory;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" * Writes to the first line of a txt file","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" * can be used to clear a txt file as well.","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" * @param filePath relative path of file to write to","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" * @param textToAdd what to write to the file","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if invalid input is entered","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" public void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" fw.close();","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" * Appends given text to next line of txt file.","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" * @param filePath relative path of file to write to","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":" * @param textToAppend what to write to the file","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if invalid input is given","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" public void appendToFile(String filePath, String textToAppend) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" BufferedWriter bf \u003d new BufferedWriter(new FileWriter(filePath,true));","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":" bf.write(textToAppend);","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":" bf.newLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":" bf.close();","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"TeoHaoZhi"},"content":" * Loads drugs from txt file into inventory system.","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":" * @param filePath Relative path to file containing list of drugs to be loaded.","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if file is not found","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" public void loadFileContents(String filePath) throws IOException, InvalidDrugFormatException {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" File holder \u003d new File(\"./drugs.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":" if (!holder.exists()) {","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" holder.createNewFile();","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":" Scanner reader \u003d new Scanner(f);","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"martinschnder"},"content":" Pattern pattern \u003d Pattern.compile(\"Name: (.*), Expiry date: (.*), Quantity: (.*)\");","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" while(reader.hasNextLine()){","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" Matcher matcher \u003d pattern.matcher(reader.nextLine());","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 3) {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"martinschnder"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":" String expiryDate \u003d matcher.group(2);","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"martinschnder"},"content":" Long quantity \u003d Long.parseLong(matcher.group(3));","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"martinschnder"},"content":" Drug drug \u003d new Drug(name, expiryDate);","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"martinschnder"},"content":" inventory.addNewDrug(name, drug, quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"martinschnder"},"content":" throw new InvalidDrugFormatException(\"\");","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":85,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":26,"TeoHaoZhi":59}},{"path":"src/main/java/seedu/stocker/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_USERNAME_INPUT;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_USER_ALREADY_EXIST;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_LOGIN_WELCOME;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_SUCCESSFUL_LOGIN;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_NO_BLANK_NAME_ALLOWED;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_NO_BLANK_PASSWORD_ALLOWED;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_PASSWORD_INPUT;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_WELCOME;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_CHOICE;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_GOODBYE;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_USERNAME_OR_PASSWORD;","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_SUCCESSFUL_REGISTRATION;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INIT_FAILED;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"public class Ui {","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" * Offset required to convert between 1-indexing and 0-indexing.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" public static final int DISPLAYED_INDEX_OFFSET \u003d 1;","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" * A decorative prefix added to the beginning of lines printed by Jerry","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" private static final String LINE_PREFIX \u003d \"|| \";","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"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-09"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" * A platform independent line separator.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":" private static final String LS \u003d System.lineSeparator();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" * Format of indexed list item","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" private static final String MESSAGE_INDEXED_LIST_ITEM \u003d \"\\t%1$d. %2$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":" public Ui() {","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"martinschnder"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" this.out \u003d out;","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"martinschnder"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"martinschnder"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"martinschnder"},"content":" * Echos the command back to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"martinschnder"},"content":" * @return command (full line) entered by the user","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" out.print(LINE_PREFIX + \"Enter command: \");","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":" String fullUserInput \u003d in.nextLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":" return fullUserInput;","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":" * Shows message(s) to the user","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"martinschnder"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"martinschnder"},"content":" for (String m : message) {","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"martinschnder"},"content":" out.println(LINE_PREFIX + m.replace(\"\\n\", LS + LINE_PREFIX));","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" public void showLoginMessage() {","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(DIVIDER, MESSAGE_LOGIN_WELCOME, DIVIDER);","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":" public void showUsernameMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_USERNAME_INPUT);","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":" public void showPasswordMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_PASSWORD_INPUT);","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":" public void showSuccessfulRegistrationMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_SUCCESSFUL_REGISTRATION);","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"TeoHaoZhi"},"content":" public void showSuccessfulLoginMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":103,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_SUCCESSFUL_LOGIN);","lastModifiedDate":"2023-10-14"},{"lineNumber":104,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"TeoHaoZhi"},"content":" public void showInvalidChoiceMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_INVALID_CHOICE);","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"TeoHaoZhi"},"content":" public void showUserAlreadyExistMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_USER_ALREADY_EXIST);","lastModifiedDate":"2023-10-14"},{"lineNumber":112,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":113,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":114,"author":{"gitId":"TeoHaoZhi"},"content":" public void showEnterChoiceAgainMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_LOGIN_WELCOME);","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"TeoHaoZhi"},"content":" public void showInvalidUsernameOrPasswordMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_INVALID_USERNAME_OR_PASSWORD);","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":121,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":122,"author":{"gitId":"TeoHaoZhi"},"content":" public void showBlankNameMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_NO_BLANK_NAME_ALLOWED);","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"TeoHaoZhi"},"content":" public void showBlankPasswordMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_NO_BLANK_PASSWORD_ALLOWED);","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"martinschnder"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-10-09"},{"lineNumber":131,"author":{"gitId":"martinschnder"},"content":" showToUser(MESSAGE_WELCOME, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-09"},{"lineNumber":132,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":133,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":134,"author":{"gitId":"martinschnder"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-10-09"},{"lineNumber":135,"author":{"gitId":"martinschnder"},"content":" showToUser(MESSAGE_GOODBYE, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-09"},{"lineNumber":136,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":137,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":138,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":139,"author":{"gitId":"martinschnder"},"content":" * Shows the result of a command execution to the user. Includes additional formatting to demarcate different","lastModifiedDate":"2023-10-09"},{"lineNumber":140,"author":{"gitId":"martinschnder"},"content":" * command execution segments.","lastModifiedDate":"2023-10-09"},{"lineNumber":141,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":142,"author":{"gitId":"martinschnder"},"content":" public \u003cT\u003evoid showResultToUser(CommandResult\u003cT\u003e result) {","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"martinschnder"},"content":" final Optional\u003cList\u003cT\u003e\u003e resultElements \u003d result.getRelevantElements();","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"martinschnder"},"content":" if (resultElements.isPresent()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"martinschnder"},"content":" showElementsListView(resultElements.get());","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":147,"author":{"gitId":"martinschnder"},"content":" showToUser(result.feedbackToUser, DIVIDER);","lastModifiedDate":"2023-10-09"},{"lineNumber":148,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":149,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":150,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":151,"author":{"gitId":"TeoHaoZhi"},"content":" * Shows a list of strings to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-14"},{"lineNumber":152,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":153,"author":{"gitId":"martinschnder"},"content":" private void showToUserAsIndexedList(List\u003cString\u003e list) {","lastModifiedDate":"2023-10-09"},{"lineNumber":154,"author":{"gitId":"martinschnder"},"content":" showToUser(getIndexedListForViewing(list));","lastModifiedDate":"2023-10-09"},{"lineNumber":155,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":156,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":157,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":158,"author":{"gitId":"martinschnder"},"content":" * Shows a list of drugs to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-09"},{"lineNumber":159,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":160,"author":{"gitId":"martinschnder"},"content":" private \u003cT\u003evoid showElementsListView(List\u003cT\u003e elements) {","lastModifiedDate":"2023-10-23"},{"lineNumber":161,"author":{"gitId":"martinschnder"},"content":" final List\u003cString\u003e formattedElements \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":162,"author":{"gitId":"martinschnder"},"content":" for (int i \u003d 0; i \u003c elements.size(); i++) {","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"martinschnder"},"content":" formattedElements.add(elements.get(i).toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":165,"author":{"gitId":"martinschnder"},"content":" showToUserAsIndexedList(formattedElements);","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":167,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":168,"author":{"gitId":"martinschnder"},"content":" public void showInitFailedMessage() {","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"martinschnder"},"content":" showToUser(MESSAGE_INIT_FAILED, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":173,"author":{"gitId":"TeoHaoZhi"},"content":" * Formats a list of strings as a viewable indexed list.","lastModifiedDate":"2023-10-14"},{"lineNumber":174,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":175,"author":{"gitId":"martinschnder"},"content":" public static String getIndexedListForViewing(List\u003cString\u003e listItems) {","lastModifiedDate":"2023-10-10"},{"lineNumber":176,"author":{"gitId":"martinschnder"},"content":" final StringBuilder formatted \u003d new StringBuilder();","lastModifiedDate":"2023-10-09"},{"lineNumber":177,"author":{"gitId":"martinschnder"},"content":" int displayIndex \u003d DISPLAYED_INDEX_OFFSET;","lastModifiedDate":"2023-10-09"},{"lineNumber":178,"author":{"gitId":"martinschnder"},"content":" for (String listItem : listItems) {","lastModifiedDate":"2023-10-09"},{"lineNumber":179,"author":{"gitId":"martinschnder"},"content":" formatted.append(getIndexedListItem(displayIndex, listItem)).append(LS);","lastModifiedDate":"2023-10-11"},{"lineNumber":180,"author":{"gitId":"martinschnder"},"content":" displayIndex++;","lastModifiedDate":"2023-10-09"},{"lineNumber":181,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":182,"author":{"gitId":"martinschnder"},"content":" return formatted.toString();","lastModifiedDate":"2023-10-09"},{"lineNumber":183,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":184,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":185,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":186,"author":{"gitId":"martinschnder"},"content":" * Formats a string as a viewable indexed list item.","lastModifiedDate":"2023-10-09"},{"lineNumber":187,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":188,"author":{"gitId":"martinschnder"},"content":" * @param visibleIndex visible index for this listing","lastModifiedDate":"2023-10-09"},{"lineNumber":189,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":190,"author":{"gitId":"martinschnder"},"content":" private static String getIndexedListItem(int visibleIndex, String listItem) {","lastModifiedDate":"2023-10-09"},{"lineNumber":191,"author":{"gitId":"martinschnder"},"content":" return String.format(MESSAGE_INDEXED_LIST_ITEM, visibleIndex, listItem);","lastModifiedDate":"2023-10-09"},{"lineNumber":192,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":193,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":194,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"martinschnder":97,"TeoHaoZhi":97}},{"path":"src/main/java/seedu/stocker/vendors/Vendor.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.vendors;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"public class Vendor {","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":" public String name;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":" public Vendor(String name) {","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" * Gets the name of the vendor.","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" * @return The name of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public String getName() {","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" return name;","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" * Sets the name of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" * @param name The new name to set for the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" * Returns a string representation of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" * @return A string containing the name of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" public String toString() {","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" return \"Name: \" + name;","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":38}},{"path":"src/main/java/seedu/stocker/vendors/VendorsList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.vendors;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"public class VendorsList {","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" public static ArrayList\u003cVendor\u003e vendorArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public VendorsList(){","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" vendorArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" * Adds new vendor to vendor list","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" * @param vendor","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" public static void addNewVendor(Vendor vendor){","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" vendorArrayList.add(vendor);","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" * Gets details of all vendors","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" * @return","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public static List\u003cVendor\u003e getVendorEntries() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" return vendorArrayList.stream()","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" .collect(Collectors.toCollection(ArrayList::new));","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":32}},{"path":"src/test/java/seedu/stocker/StockerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker;","lastModifiedDate":"2023-10-08"},{"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":"TeoHaoZhi"},"content":"class StockerTest {","lastModifiedDate":"2023-10-08"},{"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":{"TeoHaoZhi":2,"-":10}},{"path":"src/test/java/seedu/stocker/commands/AddCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"class AddCommandTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" AddCommand command \u003d new AddCommand(\"Paracetamol\", \"12/05/2024\", 12L); ","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" command.setData(new Inventory(), new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" String expectedOutput \u003d \"New drug added in the inventory: Paracetamol\";","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" assertEquals(command.execute().feedbackToUser, new CommandResult(expectedOutput).feedbackToUser);","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" assertEquals(command.execute().getRelevantElements(), new CommandResult(expectedOutput).getRelevantElements());","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"martinschnder":21}},{"path":"src/test/java/seedu/stocker/commands/AddToCartCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"class AddToCartCommandTest {","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" ","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" AddCommand command \u003d new AddCommand(\"Paracetamol\", \"12/05/2024\", 12L); ","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" Cart cart \u003d new Cart();","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" assertEquals(0, cart.getCurrentCart().size());","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" SalesList salesList \u003d new SalesList();","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" command.setData(inventory, salesList, cart);","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" command.execute();","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" AddToCartCommand command2 \u003d new AddToCartCommand(\"paracetamol\", 2L);","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" command2.setData(inventory, salesList, cart);","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" command2.execute();","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" assertEquals(command2.execute().feedbackToUser, \"New drug added in the current cart: Paracetamol\");","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"martinschnder":27}},{"path":"src/test/java/seedu/stocker/commands/DeleteCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"karishma-t"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"karishma-t"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"karishma-t"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"karishma-t"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"karishma-t"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"karishma-t"},"content":"class DeleteCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"karishma-t"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"karishma-t"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"karishma-t"},"content":" // Create an inventory and add a drug to it","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"karishma-t"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" Drug doliprane \u003d new Drug(\"Doliprane\", \"12/06/2035\");","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" inventory.addNewDrug(\"doliprane\", doliprane, 52L);","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"karishma-t"},"content":" // Create a DeleteCommand for the drug","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"karishma-t"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(\"Doliprane\");","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" deleteCommand.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"karishma-t"},"content":" // Test the execution of the DeleteCommand","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" String expectedOutput \u003d \"Drug removed from inventory: Doliprane\";","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"karishma-t"},"content":" assertEquals(deleteCommand.execute().feedbackToUser, expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"karishma-t"},"content":" // Ensure that the drug is no longer in the inventory","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" assertEquals(0, inventory.getStockEntries().size());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"karishma-t"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"karishma-t":25,"martinschnder":7}},{"path":"src/test/java/seedu/stocker/commands/FindCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" * JUnit test class for the FindCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"class FindCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":" * Tests the execution of the FindCommand with a keyword for drug names.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" public void executeTestByName() {","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" // Create an instance of FindCommand with a keyword","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":" FindCommand command \u003d new FindCommand(\"Pa\", \"/n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" Drug drug2 \u003d new Drug(\"Panadol\", \"04/07/2030\");","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"Panadol\", drug2, 20L);","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" // Set the modified inventory for the command","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" // Define expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d \"1. Name: Panadol, Expiry date: 04/07/2030, Quantity: 20\" + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" \"Listed all drugs with the keyword in the inventory.\";","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" CommandResult actualResult \u003d command.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" // Test the command\u0027s execute method with the modified inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, actualResult.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" * Tests the execution of the FindCommand with a keyword for drug expiry dates.","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"Barbaracwx"},"content":" public void executeTestByExpiryDate() {","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"Barbaracwx"},"content":" // Create an instance of FindCommand with a keyword for expiry date","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"Barbaracwx"},"content":" FindCommand command \u003d new FindCommand(\"01/03/2027\", \"/d\");","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"Barbaracwx"},"content":" Drug drug1 \u003d new Drug(\"Paracetamol\", \"01/03/2027\");","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"Paracetamol\", drug1, 12L);","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"Barbaracwx"},"content":" // Set the modified inventory for the command","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"Barbaracwx"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"Barbaracwx"},"content":" // Define expected output for drugs with matching expiry date","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d \"1. Name: Paracetamol, Expiry date: 01/03/2027, Quantity: 12\" + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"Barbaracwx"},"content":" \"Listed all drugs with the keyword in the inventory.\";","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"Barbaracwx"},"content":" CommandResult actualResult \u003d command.execute();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"Barbaracwx"},"content":" // Test the command\u0027s execute method with the modified inventory","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, actualResult.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"Barbaracwx"},"content":" * Tests the execution of the FindCommand with a null keyword, expecting an invalid format message.","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"Barbaracwx"},"content":" public void executeTestWithNullKeyword() {","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"Barbaracwx"},"content":" // Create an instance of FindCommand with a null keyword","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"Barbaracwx"},"content":" FindCommand command \u003d new FindCommand(\"\", \"/n\");","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"Barbaracwx"},"content":" // Set the modified inventory for the command","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"Barbaracwx"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"Barbaracwx"},"content":" // Define expected output for invalid format","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"Barbaracwx"},"content":" CommandResult actualResult \u003d command.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"Barbaracwx"},"content":" // Test the command\u0027s execute method with a null keyword","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, actualResult.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"martinschnder":3,"Barbaracwx":91}},{"path":"src/test/java/seedu/stocker/commands/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"class HelpCommandTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" HelpCommand command \u003d new HelpCommand();","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" String expectedOutput \u003d System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \"add: Adds a new drug to the drug list. Parameters: NAME, EXPIRY DATE, QUANTITY, \"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: add /n Doliprane /d 12/06/2035 /q 52\"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + \"delete: Removes a drug from drug list. Parameters: Name \"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: delete \u003cDrug Name\u003e\"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" + \"help: Shows program usage instructions. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: help\"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" + \"list: List all drug information that is being tracked by the system. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: list\"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":" + \"stocklevel: List all drugs by quantity level tracked by the system in ascending order. \"","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: stocklevel\"","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" + \"find /n: Finds drug in inventory using name.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: find /n panadol\"","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" + \"find /d: Finds drug in inventory using date.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: find /d panadol\"","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" + \"addtocart: Adds a new drug to the current cart. Parameters: NAME, QUANTITY,\"","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" + \"Example: addtocart /n Doliprane /q 2\"","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" + \"checkout: Checks out current cart. Parameters:\"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" + \"Example: checkout\"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":" + \"viewcart: View the current cart items.\"","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" + \"Example: viewcart\"","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" + \"login: Login new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: login\"","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":" + \"register: Register new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: register\"","lastModifiedDate":"2023-10-20"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":" + \"save: Saves existing druglist that is loaded into inventory when system is booted up.\"","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: save\"","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" + \"addVendor: Adds a new vendor to the vendors list. Parameter: NAME\"","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: addVendor Moderna\"","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":" + \"listVendors: List all vendor information that is being tracked by the system.\"","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: listVendors\"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" + \"bye: Exits the program.\"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: bye\";","lastModifiedDate":"2023-10-11"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":" assertEquals(new CommandResult(expectedOutput).feedbackToUser, command.execute().feedbackToUser);","lastModifiedDate":"2023-10-11"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"martinschnder":15,"TeoHaoZhi":73,"Barbaracwx":10}},{"path":"src/test/java/seedu/stocker/commands/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"azfarulmatin"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"azfarulmatin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"azfarulmatin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"//test for list","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"azfarulmatin"},"content":"class ListCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"azfarulmatin"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"azfarulmatin"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"azfarulmatin"},"content":" ListCommand command \u003d new ListCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" command.setData(new Inventory(), new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"azfarulmatin"},"content":" String expectedOutput \u003d \"The inventory is empty.\";","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"azfarulmatin"},"content":" assertEquals( new CommandResult(expectedOutput).feedbackToUser,command.execute().feedbackToUser);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"azfarulmatin"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"martinschnder":3,"azfarulmatin":15,"Barbaracwx":1}},{"path":"src/test/java/seedu/stocker/ui/UiTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"class UiTest {","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public void getIndexedListForViewing_success() {","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" String expectedOutput \u003d \"\\t1. Paracetamol\" + System.lineSeparator()","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" + \"\\t2. Ibuprofene\" + System.lineSeparator()","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" + \"\\t3. Doliprane\" + System.lineSeparator();","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" List\u003cString\u003e input \u003d Arrays.asList(\"Paracetamol\", \"Ibuprofene\", \"Doliprane\");","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" assertEquals(expectedOutput, new Ui().getIndexedListForViewing(input));","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"martinschnder":11,"TeoHaoZhi":11}},{"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":"TeoHaoZhi"},"content":"FC ACTUAL.TXT ACTUAL.TXT \u003eNUL \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"TeoHaoZhi":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":"-"},"content":"diff EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"if [ ACTUAL.TXT \u003d\u003d ACTUAL.TXT ]","lastModifiedDate":"2023-10-14"},{"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":{"TeoHaoZhi":1,"-":22}}] +[{"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":"martinschnder"},"content":" mainClass.set(\"seedu.stocker.Stocker\")","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":"martinschnder"},"content":" archiveBaseName.set(\"stocker\")","lastModifiedDate":"2023-10-09"},{"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":"TeoHaoZhi"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"martinschnder":2,"TeoHaoZhi":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":"TeoHaoZhi"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"|-----------------------------|:----------------:|:------------------------------------------:|:--------------------------------:|","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"| ![](team/Martin.jpeg) | Martin Schneider | [Github](https://github.com/martinschnder) | [Portfolio](docs/team/Martin.md) |","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"| ![](team/Karishma.png) | Karishma | [Github](https://github.com/karishma-t) | [Portfolio](team/karishma.md) |","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"karishma-t"},"content":"| ![](team/Barbara_image.JPG) | Barbara Chong | [Github](https://github.com/barbaracwx) | [Portfolio](team/Barbara.md) |","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"| ![](team/HaoZhi.png) | Teo Hao Zhi | [Github](https://github.com/TeoHaoZhi) | [Portfolio](team/HaoZhi.md) |","lastModifiedDate":"2023-10-06"},{"lineNumber":9,"author":{"gitId":"azfarulmatin"},"content":"| ![](team/Azfarul.JPG) | Azfarul Matin | [Github](https://github.com/azfarulmatin) | [Portfolio](team/Azfarul.md) |","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"karishma-t":1,"martinschnder":1,"azfarulmatin":2,"TeoHaoZhi":5,"-":2}},{"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":"TeoHaoZhi"},"content":"1. Reference to AB-3 Developer Guide","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"- [Source](https://se-education.org/addressbook-level3/DeveloperGuide.html#proposed-undoredo-feature)","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"- Used as template to structure this Developer Guide","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"\u003cimg src\u003d\"UML Diagrams/Architecture_Diagram.png\" width\u003d\"280\"\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"The architecture diagram given above explains the high level design of the application. The diagram depicts the key","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"component of the application that enables it to provide its functionalities.","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"Majority of the app\u0027s work is done by the following components","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"- Login System : Handles user authentication before enabling app usage","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"- Ui : Asks for user input by handling output messages","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"- Parser : Makes sense of user input","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"- Commands : List of various commands","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"- CommandResult : Execution of various commands","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":"The section below will explain in more detail the design considerations, implementations and rationale of the various","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"components listed above.","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"### Login System Component","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":"The login system component seeks to authenticate and login existing users or register a new user.","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":"#### Design considerations","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":"- There must be a way to check and verify users with a master list","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":"- The search for existing users username and password must be fast","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":"- Master list must be stored separately on hard drive of machine","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":"#### Implementation and rationale","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":"The login system class works in the following way. Upon booting up the application, a txt file","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":"containing a current list of existing users will be loaded into a users attribute within the class in the form of a hash","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"table.When a user attempts to login to their account, the entered username and password is checked against","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":"the current list of users in the hashtable. If the username and password matches, the user is logged in.","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":"As for registering new users, newly inputted username and password will be saved to the users attribute and this","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":"pair of username and password is then appended to the txt file containing current users. The updated user list will be","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":"loaded into the users attribute when the application is booted up again.","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":"The login system class uses the below methods to achieve its functionality","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":"- `authenticateUserChoice()` -Decides whether the user chooses to register or login","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":"- `newUserCreator()` -Creates a new user for future login","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":"- `loginExistingUser()` -Login existing user","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":"- `loadExistingUsers()` -Load existing users into hashtable for reference","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":"Given below is an example of how the login system class works.","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":"When the user first launches the programme, the Stocker object will be instantiated. The object will","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":"invoke its own `run()` method which will call its own `start()` method. The Stocker object then instantiates a","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":"new UI object which displays the login message by invoking `showLoginMessage()` method. At this point, Stocker object","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":"will also instantiate a new login system object.","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":"The login system object will invoke its own `run()` method to begin the login process. This method begins by loading","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":"existing users into the users attribute of the login system class by `loadExistingusers()` method. it then invokes","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":"`authenticateUserChoice()` to receive an input from the user to whether register or login a user. Based on the input of","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":"the user, either `newUserCreator()` is launched or `loginExistingUser()` methods will be called to register or login a","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":"user.","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":"The following sequence diagram shows how the login system class works when the program is launched.","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"\u003cimg src\u003d\"UML Diagrams/StockerToLoginSystem.png\" width\u003d\"280\"\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"martinschnder"},"content":"### Main data structures","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"martinschnder"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"martinschnder"},"content":"#### Implementation","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"martinschnder"},"content":"##### Drug","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"martinschnder"},"content":"The Drug class is very basic class for now. It only contains the product name as well as it\u0027s expiry date, but we will soon add some new properties such as product description, etc...","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"martinschnder"},"content":"##### Inventory","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"martinschnder"},"content":"The Inventory class is used to keep track of the quantity of product in stock. The hash map seemed to be the most appropriate data structure to match a product id to a quantity and a product entity which are encapsulated in a \"StockEntry\" class.","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"martinschnder"},"content":"##### Cart","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"martinschnder"},"content":"The Cart class is used to represent an ongoing transaction : to perform a sale, the vendor can add different products with their respective quantities in a cart which will be deducted from the inventory at the checkout.","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"martinschnder"},"content":"To represent this, we chose to use an arraylist of \"CartEntry\" classes which reprensent a product/quantity tuple.","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"martinschnder"},"content":"##### SalesList","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"martinschnder"},"content":"The SalesList is used to represent every past sales in order to create some statistics and reports. This class is only a list of subclasses representing validated carts.","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"martinschnder"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"Barbaracwx"},"content":"## Commands","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"Barbaracwx"},"content":"## 1. Find Function","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function is designed to enable users to search for specific drugs in the inventory using either the drug\u0027s","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"Barbaracwx"},"content":"name or the drugs expiry date. This component assists in locating and retrieving relevant drugs efficiently.","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"Barbaracwx"},"content":"**Design Considerations**","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"Barbaracwx"},"content":"The design of the \"Find\" function takes into account the following considerations:","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"Barbaracwx"},"content":"1. **Search Criteria:** The function must provide users with the ability to specify each criteria, such as keywords or","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"Barbaracwx"},"content":" attributes, to filter the items they are looking for.","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"Barbaracwx"},"content":"2. **Search Speed:** To enhance user experience, the search process should be fast and responsive, ensuring that users","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"Barbaracwx"},"content":" receive search results quickly.","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"Barbaracwx"},"content":"**Implementation and Rationale**","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function is implemented as follows:","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"Barbaracwx"},"content":"- **User-Defined Search Criteria:** Users provide search criteria, such as keywords, to define what they","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"Barbaracwx"},"content":" are looking for. The \"Find\" function processes these criteria to locate relevant items.","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"Barbaracwx"},"content":"- **Search Algorithm:** A robust search algorithm is employed to efficiently scan through the list of items and identify","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"Barbaracwx"},"content":" those","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"Barbaracwx"},"content":" that match the specified criteria.","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"Barbaracwx"},"content":"- **Result Presentation:** The function displays the search results, presenting users with a list of items that meet the","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"Barbaracwx"},"content":" search criteria, allowing them to quickly identify the items they are interested in.","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"Barbaracwx"},"content":"- **User-Friendly Interface:** The \"Find\" function is integrated into the user interface, making it easily accessible","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"Barbaracwx"},"content":" and intuitive for users to perform searches.","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"Barbaracwx"},"content":"- **Alternative Consideration:** During the design process, alternative approaches to searching are evaluated to ensure","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"Barbaracwx"},"content":" the","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"Barbaracwx"},"content":" most effective and user-friendly method is implemented.","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":142,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function offers a valuable way for users to narrow down their searches, find specific items of interest, and","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"Barbaracwx"},"content":"enhance the usability of the application.","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"Barbaracwx"},"content":"**Function Methods**","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":147,"author":{"gitId":"Barbaracwx"},"content":"The \"Find\" function includes the following method to achieve its functionality:","lastModifiedDate":"2023-10-25"},{"lineNumber":148,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":149,"author":{"gitId":"Barbaracwx"},"content":"- `execute()` - This method is responsible for executing the \"Find\" command, searching for drugs that match the","lastModifiedDate":"2023-10-25"},{"lineNumber":150,"author":{"gitId":"Barbaracwx"},"content":" user-specified keyword within the inventory.","lastModifiedDate":"2023-10-25"},{"lineNumber":151,"author":{"gitId":"Barbaracwx"},"content":"- It returns a `CommandResult` containing the outcome of the command execution,","lastModifiedDate":"2023-10-25"},{"lineNumber":152,"author":{"gitId":"Barbaracwx"},"content":" which includes a success message and a list of found StockEntry objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"Barbaracwx"},"content":"**Example Usage**","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"Barbaracwx"},"content":"To illustrate how the \"Find\" function works, consider the following example usage:","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"Barbaracwx"},"content":"1. **User Input:** The user initiates the \"Find\" command by typing something like the following:","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"Barbaracwx"},"content":"`find /n panadol` - This command instructs the program to search for drugs in the inventory based on the name criteria","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"Barbaracwx"},"content":"and the keyword \"panadol.\"","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"Barbaracwx"},"content":"`find /d 12/03/2026` - This command instructs the program to search for drugs in the inventory based on the expiry date","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"Barbaracwx"},"content":"criteria and the keyword \"12/03/2026.\"","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"Barbaracwx"},"content":"2. **Method Execution:** The `execute()` method within the \"FindCommand\" class is called. It takes the provided keyword","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"Barbaracwx"},"content":" and criterion as input.","lastModifiedDate":"2023-10-25"},{"lineNumber":168,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"Barbaracwx"},"content":"3. **Search Process:** The method processes the search by iterating through the list of `StockEntry` objects in the","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"Barbaracwx"},"content":" inventory.","lastModifiedDate":"2023-10-25"},{"lineNumber":171,"author":{"gitId":"Barbaracwx"},"content":" For each entry, it checks if the `matches` method returns `true`, which means that the drug name or expiry date","lastModifiedDate":"2023-10-25"},{"lineNumber":172,"author":{"gitId":"Barbaracwx"},"content":" contains the given keyword.","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"Barbaracwx"},"content":"4. **Building Results:** As matching entries are found, they are added to a list called `foundEntries`.","lastModifiedDate":"2023-10-25"},{"lineNumber":174,"author":{"gitId":"Barbaracwx"},"content":"5. **Result Display:** The `CommandResult` is prepared, containing a success message (e.g., \"Listed all drugs with the","lastModifiedDate":"2023-10-25"},{"lineNumber":175,"author":{"gitId":"Barbaracwx"},"content":" keyword","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"Barbaracwx"},"content":" in the inventory.\") and the list of found `StockEntry` objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":177,"author":{"gitId":"Barbaracwx"},"content":"6. `User Feedback:` The result is then displayed to the user, showing a list of drugs in the inventory that match the","lastModifiedDate":"2023-10-25"},{"lineNumber":178,"author":{"gitId":"Barbaracwx"},"content":" specified keyword.","lastModifiedDate":"2023-10-25"},{"lineNumber":179,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":180,"author":{"gitId":"Barbaracwx"},"content":"The following sequence diagram shows how the Find Command function works. ","lastModifiedDate":"2023-10-25"},{"lineNumber":181,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"Barbaracwx"},"content":"\u003cimg src\u003d\"UML Diagrams/FindCommandDiagram.png\" width\u003d\"350\"\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":183,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"Barbaracwx"},"content":"Architecture Diagram of find command function:","lastModifiedDate":"2023-10-25"},{"lineNumber":185,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"Barbaracwx"},"content":"\u003cimg src\u003d\"UML Diagrams/FindCommandArchitectureDiagram.png\" width\u003d\"500\"\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":187,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":188,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":189,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"azfarulmatin"},"content":"## 2. ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"azfarulmatin"},"content":"The `ListCommand` is responsible for listing all drugs in the inventory. This command retrieves the list of drugs from the inventory and provides it as part of the command result. If the inventory is empty, it informs the user that the inventory has no drugs.","lastModifiedDate":"2023-10-26"},{"lineNumber":193,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":194,"author":{"gitId":"azfarulmatin"},"content":"### Design Considerations","lastModifiedDate":"2023-10-26"},{"lineNumber":195,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"azfarulmatin"},"content":"- **User-Friendly Listing:** The primary goal of the `ListCommand` is to provide a user-friendly way to list all drugs in the inventory, enhancing the user\u0027s experience in accessing inventory information.","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"azfarulmatin"},"content":"### Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"azfarulmatin"},"content":"The `ListCommand` is implemented as follows:","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"azfarulmatin"},"content":"- **Retrieving Drug List:** The command retrieves the list of drugs from the inventory using the `getAllDrugs` method.","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":204,"author":{"gitId":"azfarulmatin"},"content":"- **Handling Empty Inventory:** It checks if the list of drugs is empty. If the inventory is empty, it returns a user-friendly message indicating that the inventory is empty.","lastModifiedDate":"2023-10-26"},{"lineNumber":205,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"azfarulmatin"},"content":"- **Listing Drugs:** If the inventory contains drugs, the command constructs a success message and includes the list of drugs in the command result.","lastModifiedDate":"2023-10-26"},{"lineNumber":207,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":208,"author":{"gitId":"azfarulmatin"},"content":"### Function Methods","lastModifiedDate":"2023-10-26"},{"lineNumber":209,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":210,"author":{"gitId":"azfarulmatin"},"content":"The `ListCommand` includes the following method to achieve its functionality:","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"azfarulmatin"},"content":"- `execute()`: This method is responsible for executing the `ListCommand`, listing all drugs in the inventory. It checks the inventory, prepares a user-friendly result message, and returns a `CommandResult` containing the outcome of the command execution, which includes a success message and the list of found `Drug` objects.","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"azfarulmatin"},"content":"### Example Usage","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"azfarulmatin"},"content":"To illustrate how the `ListCommand` works, consider the following example usage:","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"azfarulmatin"},"content":"1. **User Input:** The user initiates the `ListCommand` by entering the following command:","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"azfarulmatin"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"TeoHaoZhi"},"content":"## 3. Delete Command","lastModifiedDate":"2023-10-29"},{"lineNumber":223,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function is designed to enable users to remove specific drugs from the inventory based on the drug\u0027s name. This component facilitates the management of the inventory by allowing users to remove drugs they no longer need, fully depleted or discontinued.","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"karishma-t"},"content":"**Design Considerations**","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"karishma-t"},"content":"The design of the \"Delete\" function takes into account the following considerations:","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"karishma-t"},"content":"1. **User-Specified Drug Name:** The function allows users to specify the drug name they want to delete from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"karishma-t"},"content":"2. **Data Integrity:** It ensures that the deletion operation maintains the integrity of the inventory data structure, updating it correctly.","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"karishma-t"},"content":"**Implementation and Rationale**","lastModifiedDate":"2023-10-26"},{"lineNumber":235,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":236,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function is implemented as follows:","lastModifiedDate":"2023-10-26"},{"lineNumber":237,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":238,"author":{"gitId":"karishma-t"},"content":"- **User-Defined Drug Name:** Users provide the name of the drug they wish to delete.","lastModifiedDate":"2023-10-26"},{"lineNumber":239,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":240,"author":{"gitId":"karishma-t"},"content":"- **Data Deletion Algorithm:** The function employs data deletion logic to remove the specified drug from the inventory. This involves identifying the drug based on the provided name and removing it from the list.","lastModifiedDate":"2023-10-26"},{"lineNumber":241,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":242,"author":{"gitId":"karishma-t"},"content":"- **Error Handling:** The function includes error handling to address scenarios where the specified drug is not found in the inventory. In such cases, an appropriate error message is generated.","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":244,"author":{"gitId":"karishma-t"},"content":"- **User Feedback:** Upon successful deletion, the function generates a success message confirming the removal of the drug.","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function is an essential feature for managing the inventory, allowing users to keep it up to date and remove unwanted or outdated drugs.","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"karishma-t"},"content":"**Function Methods**","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function includes the following method to achieve its functionality:","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"karishma-t"},"content":"- `execute()` - This method is responsible for executing the \"Delete\" command, removing the drug with the specified name from the inventory. It returns a `CommandResult` containing the outcome of the command execution, which includes a success message upon successful deletion or an error message if the drug is not found in the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"karishma-t"},"content":"**Example Usage**","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":256,"author":{"gitId":"karishma-t"},"content":"To illustrate how the \"Delete\" function works, consider the following example usage:","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"karishma-t"},"content":"1. **User Input:** The user initiates the \"Delete\" command by typing something like the following:","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"karishma-t"},"content":" `delete /n panadol`- This command instructs the program to remove the drug named \"paracetamol\" from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"karishma-t"},"content":"2. **Method Execution:** The `execute()` method within the \"DeleteCommand\" class is called. It takes the provided drug name as input.","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":263,"author":{"gitId":"karishma-t"},"content":"3. **Search Process:** The method processes the deletion by searching for the drug with the specified name in the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":264,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"karishma-t"},"content":"4. **Deletion Operation:** If the drug is found, it is removed from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"karishma-t"},"content":"5. **Success Message:** The `CommandResult` is prepared, containing a success message (e.g., \"Drug removed from inventory: paracetamol\").","lastModifiedDate":"2023-10-26"},{"lineNumber":268,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":269,"author":{"gitId":"karishma-t"},"content":"6. **User Feedback:** The result is displayed to the user, confirming the successful removal of the drug from the inventory.","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"karishma-t"},"content":"The \"Delete\" function provides a straightforward way for users to manage the inventory by removing specific drugs as needed.","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"karishma-t"},"content":"---","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"TeoHaoZhi"},"content":"## 4. Help Command","lastModifiedDate":"2023-10-29"},{"lineNumber":275,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":276,"author":{"gitId":"TeoHaoZhi"},"content":"The command is responsible for showing users a list of all possible commands.","lastModifiedDate":"2023-10-29"},{"lineNumber":277,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":278,"author":{"gitId":"TeoHaoZhi"},"content":"**Design Considerations**","lastModifiedDate":"2023-10-29"},{"lineNumber":279,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":280,"author":{"gitId":"TeoHaoZhi"},"content":"The command was designed to print out and show how to use a list of all possible commands in a neat and concise way.","lastModifiedDate":"2023-10-29"},{"lineNumber":281,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":282,"author":{"gitId":"TeoHaoZhi"},"content":"**Implementation and Rationale**","lastModifiedDate":"2023-10-29"},{"lineNumber":283,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":284,"author":{"gitId":"TeoHaoZhi"},"content":"Command will use java\u0027s system out to print out all required information with a blank line in between for clarity.","lastModifiedDate":"2023-10-29"},{"lineNumber":285,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":286,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-29"},{"lineNumber":287,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":288,"author":{"gitId":"TeoHaoZhi"},"content":"## 5. Save Command","lastModifiedDate":"2023-10-29"},{"lineNumber":289,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":290,"author":{"gitId":"TeoHaoZhi"},"content":"The save command was made as a means to backup user entered drug data into the hard drive of the computer to ensure ","lastModifiedDate":"2023-10-29"},{"lineNumber":291,"author":{"gitId":"TeoHaoZhi"},"content":"previously entered data is saved and accessable whenever the app is launched.","lastModifiedDate":"2023-10-29"},{"lineNumber":292,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":293,"author":{"gitId":"TeoHaoZhi"},"content":"### Design Considerations","lastModifiedDate":"2023-10-29"},{"lineNumber":294,"author":{"gitId":"TeoHaoZhi"},"content":"The save command had to be implemented in a way to enable direct writing of files onto the hard drive and a function had ","lastModifiedDate":"2023-10-29"},{"lineNumber":295,"author":{"gitId":"TeoHaoZhi"},"content":"to be made to load said file back into the drug inventory upon starting the application.","lastModifiedDate":"2023-10-29"},{"lineNumber":296,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":297,"author":{"gitId":"TeoHaoZhi"},"content":"### Implementation","lastModifiedDate":"2023-10-29"},{"lineNumber":298,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":299,"author":{"gitId":"TeoHaoZhi"},"content":"There is a method to access the drugs within the inventory class. a separate method from the inventory class would then ","lastModifiedDate":"2023-10-29"},{"lineNumber":300,"author":{"gitId":"TeoHaoZhi"},"content":"write the contents of these drugs back to the txt file for saving.","lastModifiedDate":"2023-10-29"},{"lineNumber":301,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":302,"author":{"gitId":"TeoHaoZhi"},"content":"Upon booting up the system, a method from the inventory class goes through the contents of the txt file and copies it to","lastModifiedDate":"2023-10-29"},{"lineNumber":303,"author":{"gitId":"TeoHaoZhi"},"content":"the inventory drug list.","lastModifiedDate":"2023-10-29"},{"lineNumber":304,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":305,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-29"},{"lineNumber":306,"author":{"gitId":"TeoHaoZhi"},"content":"## 6. addVendor Command","lastModifiedDate":"2023-10-29"},{"lineNumber":307,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":308,"author":{"gitId":"TeoHaoZhi"},"content":"The command was made to add vendors to a list of vendors so as to have access to it when needed.","lastModifiedDate":"2023-10-29"},{"lineNumber":309,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":310,"author":{"gitId":"TeoHaoZhi"},"content":"### Design Considerations","lastModifiedDate":"2023-10-29"},{"lineNumber":311,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":312,"author":{"gitId":"TeoHaoZhi"},"content":"The storage must be size adjustable based on the number of objects, in this case vendors placed into it.","lastModifiedDate":"2023-10-29"},{"lineNumber":313,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":314,"author":{"gitId":"TeoHaoZhi"},"content":"### Implementation","lastModifiedDate":"2023-10-29"},{"lineNumber":315,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":316,"author":{"gitId":"TeoHaoZhi"},"content":"In order to attain the adjustable storage based on numebr of objects, an ArrayList was used as additional vendors can be","lastModifiedDate":"2023-10-29"},{"lineNumber":317,"author":{"gitId":"TeoHaoZhi"},"content":"appended to the ArrayList whenever a new entry is required.","lastModifiedDate":"2023-10-29"},{"lineNumber":318,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":319,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-29"},{"lineNumber":320,"author":{"gitId":"TeoHaoZhi"},"content":"## 7. listVendors Command","lastModifiedDate":"2023-10-29"},{"lineNumber":321,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":322,"author":{"gitId":"TeoHaoZhi"},"content":"The command was made to list all vendors being tracked by the system in a neat way to the user","lastModifiedDate":"2023-10-29"},{"lineNumber":323,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":324,"author":{"gitId":"TeoHaoZhi"},"content":"### Design Considerations","lastModifiedDate":"2023-10-29"},{"lineNumber":325,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":326,"author":{"gitId":"TeoHaoZhi"},"content":"The possibility of an empty list had to be considered","lastModifiedDate":"2023-10-29"},{"lineNumber":327,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":328,"author":{"gitId":"TeoHaoZhi"},"content":"### Implementation","lastModifiedDate":"2023-10-29"},{"lineNumber":329,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":330,"author":{"gitId":"TeoHaoZhi"},"content":"The list of vendors could be printed by using streams to efficiently collect and print out the information of vendors","lastModifiedDate":"2023-10-29"},{"lineNumber":331,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":332,"author":{"gitId":"TeoHaoZhi"},"content":"---","lastModifiedDate":"2023-10-29"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":334,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":335,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":336,"author":{"gitId":"Barbaracwx"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":337,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":338,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":340,"author":{"gitId":"Barbaracwx"},"content":"- Works in the field of drug distribution, such as pharmacies and doctors\u0027 offices.","lastModifiedDate":"2023-10-25"},{"lineNumber":341,"author":{"gitId":"Barbaracwx"},"content":"- Manages a large inventory of pharmaceuticals with varying details (expiration dates, manufacturers, storage","lastModifiedDate":"2023-10-25"},{"lineNumber":342,"author":{"gitId":"Barbaracwx"},"content":" conditions).","lastModifiedDate":"2023-10-25"},{"lineNumber":343,"author":{"gitId":"Barbaracwx"},"content":"- Prefers desktop applications for their work.","lastModifiedDate":"2023-10-25"},{"lineNumber":344,"author":{"gitId":"Barbaracwx"},"content":"- Proficient in fast typing.","lastModifiedDate":"2023-10-25"},{"lineNumber":345,"author":{"gitId":"Barbaracwx"},"content":"- Favors typing over mouse interactions.","lastModifiedDate":"2023-10-25"},{"lineNumber":346,"author":{"gitId":"Barbaracwx"},"content":"- Comfortable using Command Line Interface (CLI) applications for efficiency.","lastModifiedDate":"2023-10-25"},{"lineNumber":347,"author":{"gitId":"Barbaracwx"},"content":"- Requires password-protected access to sensitive patient healthcare information.","lastModifiedDate":"2023-10-25"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":349,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":351,"author":{"gitId":"Barbaracwx"},"content":"**Stocker** is designed to cater to the specific needs of drug distributors by offering the following benefits:","lastModifiedDate":"2023-10-25"},{"lineNumber":352,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":353,"author":{"gitId":"Barbaracwx"},"content":"1. Quick access to real-time inventory information.","lastModifiedDate":"2023-10-25"},{"lineNumber":354,"author":{"gitId":"Barbaracwx"},"content":"2. Efficient tracking of incoming stock.","lastModifiedDate":"2023-10-25"},{"lineNumber":355,"author":{"gitId":"Barbaracwx"},"content":"3. Categorization of drugs based on various labels.","lastModifiedDate":"2023-10-25"},{"lineNumber":356,"author":{"gitId":"Barbaracwx"},"content":"4. A prioritized list of urgently needed restocks for timely replenishment.","lastModifiedDate":"2023-10-25"},{"lineNumber":357,"author":{"gitId":"Barbaracwx"},"content":"5. Assistance in generating comprehensive reports for stock turnover analysis.","lastModifiedDate":"2023-10-25"},{"lineNumber":358,"author":{"gitId":"Barbaracwx"},"content":"6. Secure access through individual user accounts to safeguard patient healthcare data.","lastModifiedDate":"2023-10-25"},{"lineNumber":359,"author":{"gitId":"Barbaracwx"},"content":"7. Enhanced user experience for experienced professionals who prefer keyboard commands and CLI interactions for seamless","lastModifiedDate":"2023-10-25"},{"lineNumber":360,"author":{"gitId":"Barbaracwx"},"content":" stock management.","lastModifiedDate":"2023-10-25"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":362,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":364,"author":{"gitId":"martinschnder"},"content":"Priorities: High (must have) - \\* \\* _, Medium (nice to have) - _ _, Low (unlikely to have) - _","lastModifiedDate":"2023-10-25"},{"lineNumber":365,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":366,"author":{"gitId":"Barbaracwx"},"content":"| Priority | Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2023-10-25"},{"lineNumber":367,"author":{"gitId":"martinschnder"},"content":"| -------- | ------- | ----------------- | ---------------------------------------------------- | ----------------------------------------------------------- |","lastModifiedDate":"2023-10-25"},{"lineNumber":368,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Pharmacist | Add drugs to track what drugs are available in stock | Reduce manual errors |","lastModifiedDate":"2023-10-25"},{"lineNumber":369,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Pharmacist | Remove drugs to track what are no longer in used | Ensure compliance |","lastModifiedDate":"2023-10-25"},{"lineNumber":370,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Receptionist | View a list of products of that category | Easily obtain an overview of the products |","lastModifiedDate":"2023-10-25"},{"lineNumber":371,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | First-time user | See a list of all available actions | Better understand how to use the application |","lastModifiedDate":"2023-10-25"},{"lineNumber":372,"author":{"gitId":"martinschnder"},"content":"| \\* \\* \\* | v1.0 | Inventory Manager | Find a specific drug currently in the system | Check up its details and quantities specifically |","lastModifiedDate":"2023-10-25"},{"lineNumber":373,"author":{"gitId":"martinschnder"},"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-25"},{"lineNumber":374,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":375,"author":{"gitId":"martinschnder"},"content":"_(More to be added)_","lastModifiedDate":"2023-10-25"},{"lineNumber":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":377,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":379,"author":{"gitId":"Barbaracwx"},"content":"1. Should work on any mainstream OS as long as it has Java 11 or above installed.","lastModifiedDate":"2023-10-25"},{"lineNumber":380,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":381,"author":{"gitId":"Barbaracwx"},"content":"2. Should be able to hold up to 1000 drug entries without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2023-10-25"},{"lineNumber":382,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":383,"author":{"gitId":"Barbaracwx"},"content":"3. A user with above-average typing speed for regular English text (i.e. not code, not system admin commands) should be","lastModifiedDate":"2023-10-25"},{"lineNumber":384,"author":{"gitId":"Barbaracwx"},"content":" able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2023-10-25"},{"lineNumber":385,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":386,"author":{"gitId":"martinschnder"},"content":"_(More to be added)_","lastModifiedDate":"2023-10-25"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":388,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":390,"author":{"gitId":"martinschnder"},"content":"- _glossary item_ - Definition","lastModifiedDate":"2023-10-25"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":392,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":394,"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":{"karishma-t":51,"martinschnder":46,"azfarulmatin":31,"TeoHaoZhi":115,"-":30,"Barbaracwx":121}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"# Stocker","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker v1.o is a desktop app that will provide quick access to currently available stock,","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"track incoming stock and expiration dates, and categorize drugs based on different labels.","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"It is optimized for use via a Command Line Interface (CLI). If you can type fast, Stocker","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"can get your inventory management tasks done faster than traditional GUI apps.","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"TeoHaoZhi":5,"-":6}},{"path":"docs/UML Diagrams/ArchitectureDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"title Architecture Diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"skinparam component {","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"BackgroundColor lightblue","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"[Parser]","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"[Commands]","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"[CommandResult]","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"[LoginSystem and Ui] as interactor","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"interface \"user\"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"user -[hidden]- Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"CommandResult -[hidden]- Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"interactor --\u003e Parser : Makes sense of input","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"Parser -\u003e Commands : Searches for inputted command","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"Commands -\u003e CommandResult : Executes relevant command","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"CommandResult -\u003e interactor : Return control","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"user -[#red]-\u003e interactor : Logs in or Register","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"TeoHaoZhi":25}},{"path":"docs/UML Diagrams/FindCommandArchitectureDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"@startuml FindCommandArchitectureDiagram","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"!define ARROW_STYLE [-[#LOGIC_COLOR]-\u003e]","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"actor User as U","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"package \"Your Application\" {","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":" [User Interface] as UI","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":" [FindCommand] as FindCmd","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" [Inventory] as Inv","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":" [StockEntry] as Entry","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":" [CommandResult] as CmdResult","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"U -down-\u003e UI: Initiates \u0027Find\u0027 Command","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":"UI -down-\u003e FindCmd: Invokes \u0027FindCommand\u0027","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":"UI -down-\u003e Inv: Accesses \u0027Inventory\u0027","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"FindCmd -down-\u003e Entry: Iterates Through Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":"Entry -down-\u003e Entry: Checks Each Entry","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"Entry --\u003e FindCmd: Match/No Match","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":"FindCmd --\u003e CmdResult: Prepares Result","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":"CmdResult -up-\u003e UI: Returns Result","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":"CmdResult -up-\u003e U: Displays Search Results","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"Barbaracwx":26}},{"path":"docs/UML Diagrams/FindCommandDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"@startuml FindCommandDiagram","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"!define LOGIC_COLOR_T1 #7777DB","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"hide footbox","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"actor User","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"participant \"FindCommand\" as FindCmd LOGIC_COLOR_T1","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"participant \"Inventory\" as Inventory LOGIC_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":"User -\u003e FindCmd: Execute \u0027Find\u0027 Command","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"activate FindCmd","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"User \u003c-- FindCmd: CommandResult","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"FindCmd -\u003e Inventory: Retrieve Stock Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":"activate Inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"Inventory --\u003e FindCmd: List of Stock Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":"FindCmd -\u003e FindCmd: Process Entries","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"FindCmd --\u003e User: Display Search Results","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"Barbaracwx":22}},{"path":"docs/UML Diagrams/ListCommand.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"azfarulmatin"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"azfarulmatin"},"content":"class ListCommand {","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"azfarulmatin"},"content":" - COMMAND_WORD: String","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":" - MESSAGE_USAGE: String","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"azfarulmatin"},"content":" - MESSAGE_SUCCESS: String","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"azfarulmatin"},"content":" + execute(): CommandResult","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"azfarulmatin"},"content":"}","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"azfarulmatin"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"azfarulmatin":8}},{"path":"docs/UML Diagrams/StockerToLoginSystem.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"@startuml","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"\u0027https://plantuml.com/sequence-diagram","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"hide footbox","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"actor User","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"Participant \":Stocker\" as Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"Participant \":Ui\" as Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"Participant \":LoginSystem\" as LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"User -\u003e Stocker : Stocker()","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"activate Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e Stocker : run()","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"activate Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e Stocker :start()","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e Ui : Ui()","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate Stocker","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"activate Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"Ui -\u003e Ui : showLoginMessage()","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"activate Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"Ui -\u003e Ui : ShowToUser()","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate Ui","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"Ui --\u003e User : LoginMessage","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"Stocker -\u003e LoginSystem :LoginSystem()","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"activate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem : run()","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"activate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem : loadExistingUsers()","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem: authenticateUserChoice()","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"User -\u003e LoginSystem : register or login input","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":"alt Register","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003e LoginSystem : newUserCreator()","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem --\u003e User : showSuccessfulRegistrationMessage()","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":"else Login","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem -\u003eLoginSystem : loginExistingUser()","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"LoginSystem --\u003e User: showSuccessfulLoginMessage()","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":"end","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":"deactivate LoginSystem","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":"@enduml","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"TeoHaoZhi":47}},{"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":"TeoHaoZhi"},"content":"Stocker v1.o is a desktop app that will provide quick access to currently available stock, ","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"track incoming stock and expiration dates, and categorize drugs based on different labels. ","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"It is optimized for use via a Command Line Interface (CLI). If you can type fast, Stocker ","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"can get your inventory management tasks done faster than traditional GUI apps.","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"{Give steps to get started quickly}","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"1. Down the latest version of `Stocker` from [here](https://github.com/AY2324S1-CS2113-T17-3/tp/releases).","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-Login System","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"Authentication system that allows user to register as a user or login","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"as an existing user.","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-add","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a drug into the inventory list.","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-delete","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"Deletes a drug being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-list","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":"List all drug information that is being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-find","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":"Finds drugs using their name or expiry date.","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-help","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":"List all currently available commands in current version, their ","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"uses and how to format them in the command line.","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-register","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":"Register a new user into the login system.","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-login","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":"Login an existing user into the system.","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-save","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"TeoHaoZhi"},"content":"Save existing drugs from inventory list onto a txt file.","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"TeoHaoZhi"},"content":"File is then used to update inventory list when stocker is ran.","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature-add vendor","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a vendor into a list to be tracked by the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":"### Feature- list vendors","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":"Displays the name of all vendors being tracked by the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":"## Usage","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":"### `Login System`- Create new user or login existing user","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":"Login system is automatically launched at the start of the programme.","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":"**Registering a user**","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 1 : Enter register to select option to register a user.","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e ","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 2: Enter desired username and password.","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e ","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Upon successful creation, registration success message is observed","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":"Registration successful.","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":"**Login an existing user**","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 1 : Enter login to select option to login a user.","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Step 2: Enter registered username and password.","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":"\u003e Upon successful creation, successful login message is observed.","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":"Login Successful.","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"TeoHaoZhi"},"content":"### `add` - Adds drug into inventory list","lastModifiedDate":"2023-10-10"},{"lineNumber":101,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":102,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a drug to be tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":103,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":104,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":105,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":106,"author":{"gitId":"TeoHaoZhi"},"content":"add /n DRUG_NAME /d EXPIRY_DATE /q QUANTITY","lastModifiedDate":"2023-10-10"},{"lineNumber":107,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":109,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":110,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":111,"author":{"gitId":"TeoHaoZhi"},"content":"`add /n Panadol /d 12 June 2026 /q 300","lastModifiedDate":"2023-10-10"},{"lineNumber":112,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":113,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":114,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":115,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":116,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":117,"author":{"gitId":"Barbaracwx"},"content":"|| New drug added in the inventory: Panadol","lastModifiedDate":"2023-10-29"},{"lineNumber":118,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":119,"author":{"gitId":"TeoHaoZhi"},"content":"### `delete` - Deletes a drug being tracked by the system","lastModifiedDate":"2023-10-10"},{"lineNumber":120,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":121,"author":{"gitId":"TeoHaoZhi"},"content":"Deletes a drug being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":122,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":123,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":124,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":125,"author":{"gitId":"TeoHaoZhi"},"content":"delete /n DRUG_NAM","lastModifiedDate":"2023-10-10"},{"lineNumber":126,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":127,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":128,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":129,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":130,"author":{"gitId":"TeoHaoZhi"},"content":"`delete /n Panadol","lastModifiedDate":"2023-10-10"},{"lineNumber":131,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":132,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":133,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":134,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":135,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":136,"author":{"gitId":"Barbaracwx"},"content":"|| removed : Panadol","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"Barbaracwx"},"content":"|| There are now 0 drugs in the system","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":139,"author":{"gitId":"TeoHaoZhi"},"content":"### `list` - List all drug information that is being tracked by the system","lastModifiedDate":"2023-10-10"},{"lineNumber":140,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":141,"author":{"gitId":"TeoHaoZhi"},"content":"List all drug information that is being tracked by the system.","lastModifiedDate":"2023-10-10"},{"lineNumber":142,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":143,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":144,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":145,"author":{"gitId":"TeoHaoZhi"},"content":"list","lastModifiedDate":"2023-10-10"},{"lineNumber":146,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":147,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":148,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":149,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":150,"author":{"gitId":"TeoHaoZhi"},"content":"`list","lastModifiedDate":"2023-10-10"},{"lineNumber":151,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":152,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":153,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":154,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":155,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":156,"author":{"gitId":"TeoHaoZhi"},"content":"|| 1. Name: Panadol, Expiry Date: 12 June 2026/ Quantity: 300","lastModifiedDate":"2023-10-29"},{"lineNumber":157,"author":{"gitId":"Barbaracwx"},"content":"||","lastModifiedDate":"2023-10-29"},{"lineNumber":158,"author":{"gitId":"Barbaracwx"},"content":"|| Listed all drugs in the inventory.","lastModifiedDate":"2023-10-29"},{"lineNumber":159,"author":{"gitId":"Barbaracwx"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":160,"author":{"gitId":"Barbaracwx"},"content":"### `stocklevel` - List all drugs by quantity level in ascending order","lastModifiedDate":"2023-10-29"},{"lineNumber":161,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":162,"author":{"gitId":"Barbaracwx"},"content":"List all drugs by quantity level in ascending order.","lastModifiedDate":"2023-10-29"},{"lineNumber":163,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":164,"author":{"gitId":"Barbaracwx"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":165,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":166,"author":{"gitId":"Barbaracwx"},"content":"stocklevel","lastModifiedDate":"2023-10-29"},{"lineNumber":167,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":168,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":169,"author":{"gitId":"Barbaracwx"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":170,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":171,"author":{"gitId":"Barbaracwx"},"content":"`stocklevel","lastModifiedDate":"2023-10-29"},{"lineNumber":172,"author":{"gitId":"Barbaracwx"},"content":"`","lastModifiedDate":"2023-10-29"},{"lineNumber":173,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":174,"author":{"gitId":"Barbaracwx"},"content":"Expected outcome:","lastModifiedDate":"2023-10-29"},{"lineNumber":175,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":177,"author":{"gitId":"Barbaracwx"},"content":"|| \t1. Name: histamine, Expiry date: 101010, Quantity: 10","lastModifiedDate":"2023-10-29"},{"lineNumber":178,"author":{"gitId":"Barbaracwx"},"content":"|| \t2. Name: paracetamol, Expiry date: 101010, Quantity: 50","lastModifiedDate":"2023-10-29"},{"lineNumber":179,"author":{"gitId":"Barbaracwx"},"content":"|| \t3. Name: panadol, Expiry date: 101010, Quantity: 120","lastModifiedDate":"2023-10-29"},{"lineNumber":180,"author":{"gitId":"Barbaracwx"},"content":"|| ","lastModifiedDate":"2023-10-29"},{"lineNumber":181,"author":{"gitId":"Barbaracwx"},"content":"|| Stock Level Report (Sorted by Quantity)","lastModifiedDate":"2023-10-29"},{"lineNumber":182,"author":{"gitId":"Barbaracwx"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":183,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":184,"author":{"gitId":"Barbaracwx"},"content":"### `find` - Finds drugs using their name or expiry date","lastModifiedDate":"2023-10-20"},{"lineNumber":185,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":186,"author":{"gitId":"Barbaracwx"},"content":"1. Finds drugs whose **names** contain any of the given keywords.","lastModifiedDate":"2023-10-20"},{"lineNumber":187,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":188,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":189,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":190,"author":{"gitId":"Barbaracwx"},"content":"find /n panadol","lastModifiedDate":"2023-10-20"},{"lineNumber":191,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":192,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":193,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-10"},{"lineNumber":194,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":195,"author":{"gitId":"Barbaracwx"},"content":"` find /n KEYWORD ","lastModifiedDate":"2023-10-20"},{"lineNumber":196,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":197,"author":{"gitId":"Barbaracwx"},"content":"- The search is case-insensitive, meaning that \"aspirin\" will match \"Aspirin.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":198,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":199,"author":{"gitId":"Barbaracwx"},"content":"- The order of the keywords does not matter. For example, \"Painkiller Relief\" will match \"Relief Painkiller.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":200,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":201,"author":{"gitId":"Barbaracwx"},"content":"- Only the drug name is searched.","lastModifiedDate":"2023-10-20"},{"lineNumber":202,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":203,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":204,"author":{"gitId":"Barbaracwx"},"content":"Expected outcome:","lastModifiedDate":"2023-10-20"},{"lineNumber":205,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":206,"author":{"gitId":"Barbaracwx"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":207,"author":{"gitId":"Barbaracwx"},"content":"|| 1. Name: panadol, Expiry Date: 12 sep, Quantity: 120","lastModifiedDate":"2023-10-29"},{"lineNumber":208,"author":{"gitId":"Barbaracwx"},"content":"||","lastModifiedDate":"2023-10-29"},{"lineNumber":209,"author":{"gitId":"Barbaracwx"},"content":"|| Listed all drugs with the keyword in the inventory.","lastModifiedDate":"2023-10-29"},{"lineNumber":210,"author":{"gitId":"Barbaracwx"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":211,"author":{"gitId":"Barbaracwx"},"content":"2. Finds drugs whose **expiry dates** contain any of the given keywords.","lastModifiedDate":"2023-10-20"},{"lineNumber":212,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":213,"author":{"gitId":"Barbaracwx"},"content":"Format:","lastModifiedDate":"2023-10-20"},{"lineNumber":214,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":215,"author":{"gitId":"Barbaracwx"},"content":"find /d sep","lastModifiedDate":"2023-10-20"},{"lineNumber":216,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":217,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":218,"author":{"gitId":"Barbaracwx"},"content":"Example of usage:","lastModifiedDate":"2023-10-20"},{"lineNumber":219,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":220,"author":{"gitId":"Barbaracwx"},"content":"` find /d KEYWORD","lastModifiedDate":"2023-10-20"},{"lineNumber":221,"author":{"gitId":"Barbaracwx"},"content":"`","lastModifiedDate":"2023-10-20"},{"lineNumber":222,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":223,"author":{"gitId":"Barbaracwx"},"content":"- Only the drug\u0027s expiry date is searched.","lastModifiedDate":"2023-10-20"},{"lineNumber":224,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":225,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":226,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":227,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":228,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":229,"author":{"gitId":"Barbaracwx"},"content":"1. Name: panadol, Expiry Date: 12 sep, Quantity: 120","lastModifiedDate":"2023-10-20"},{"lineNumber":230,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":231,"author":{"gitId":"Barbaracwx"},"content":"Listed all drugs with the keyword in the inventory.","lastModifiedDate":"2023-10-20"},{"lineNumber":232,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":233,"author":{"gitId":"TeoHaoZhi"},"content":"### `help` - List currently available commands in current version, their uses and how to format them in the command line","lastModifiedDate":"2023-10-10"},{"lineNumber":234,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":235,"author":{"gitId":"TeoHaoZhi"},"content":"List all currently available commands in current version, ","lastModifiedDate":"2023-10-10"},{"lineNumber":236,"author":{"gitId":"TeoHaoZhi"},"content":"their uses and how to format them in the command line","lastModifiedDate":"2023-10-10"},{"lineNumber":237,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":238,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":239,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-10"},{"lineNumber":240,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":241,"author":{"gitId":"TeoHaoZhi"},"content":"help","lastModifiedDate":"2023-10-10"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":244,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":245,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":246,"author":{"gitId":"TeoHaoZhi"},"content":"`help","lastModifiedDate":"2023-10-10"},{"lineNumber":247,"author":{"gitId":"TeoHaoZhi"},"content":"`","lastModifiedDate":"2023-10-10"},{"lineNumber":248,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":249,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-10"},{"lineNumber":250,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":251,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":252,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":253,"author":{"gitId":"TeoHaoZhi"},"content":"|| add: Adds a new drug to the drug list. Parameters: NAME, EXPIRY DATE, QUANTITY, ","lastModifiedDate":"2023-10-15"},{"lineNumber":254,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: add /n Doliprane /d 12/06/2035 /q 52","lastModifiedDate":"2023-10-15"},{"lineNumber":255,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":256,"author":{"gitId":"TeoHaoZhi"},"content":"|| delete: Removes a drug from drug list. Parameters: Name ","lastModifiedDate":"2023-10-15"},{"lineNumber":257,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: delete \u003cDrug Name\u003e","lastModifiedDate":"2023-10-15"},{"lineNumber":258,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":259,"author":{"gitId":"TeoHaoZhi"},"content":"|| help: Shows program usage instructions. ","lastModifiedDate":"2023-10-15"},{"lineNumber":260,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: help","lastModifiedDate":"2023-10-15"},{"lineNumber":261,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":262,"author":{"gitId":"TeoHaoZhi"},"content":"|| list: List all drug information that is being tracked by the system. ","lastModifiedDate":"2023-10-15"},{"lineNumber":263,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: list","lastModifiedDate":"2023-10-15"},{"lineNumber":264,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":265,"author":{"gitId":"Barbaracwx"},"content":"|| find: Finds drug in inventory using name or expiry date","lastModifiedDate":"2023-10-20"},{"lineNumber":266,"author":{"gitId":"Barbaracwx"},"content":"|| Example: find /n panadol","lastModifiedDate":"2023-10-20"},{"lineNumber":267,"author":{"gitId":"Barbaracwx"},"content":"|| Example: find /d sep","lastModifiedDate":"2023-10-20"},{"lineNumber":268,"author":{"gitId":"TeoHaoZhi"},"content":"|| ","lastModifiedDate":"2023-10-15"},{"lineNumber":269,"author":{"gitId":"TeoHaoZhi"},"content":"|| bye: Exits the program.","lastModifiedDate":"2023-10-15"},{"lineNumber":270,"author":{"gitId":"TeoHaoZhi"},"content":"|| Example: bye","lastModifiedDate":"2023-10-15"},{"lineNumber":271,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-10"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":273,"author":{"gitId":"TeoHaoZhi"},"content":"### `register` - Register a new user into the system","lastModifiedDate":"2023-10-20"},{"lineNumber":274,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":275,"author":{"gitId":"TeoHaoZhi"},"content":"Asks for user input for a username and password field which","lastModifiedDate":"2023-10-20"},{"lineNumber":276,"author":{"gitId":"TeoHaoZhi"},"content":"will be used to create a new user for the system.","lastModifiedDate":"2023-10-20"},{"lineNumber":277,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":278,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":279,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-20"},{"lineNumber":280,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":281,"author":{"gitId":"TeoHaoZhi"},"content":"register","lastModifiedDate":"2023-10-20"},{"lineNumber":282,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":283,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":284,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-20"},{"lineNumber":285,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":286,"author":{"gitId":"TeoHaoZhi"},"content":"`register`","lastModifiedDate":"2023-10-20"},{"lineNumber":287,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":288,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-20"},{"lineNumber":289,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":290,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":291,"author":{"gitId":"TeoHaoZhi"},"content":"Registration Successful.","lastModifiedDate":"2023-10-20"},{"lineNumber":292,"author":{"gitId":"TeoHaoZhi"},"content":"New User Created.","lastModifiedDate":"2023-10-20"},{"lineNumber":293,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":294,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":295,"author":{"gitId":"TeoHaoZhi"},"content":"### `login` - login an existing user into the system","lastModifiedDate":"2023-10-20"},{"lineNumber":296,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":297,"author":{"gitId":"TeoHaoZhi"},"content":"Asks for user input for a username and password field which","lastModifiedDate":"2023-10-20"},{"lineNumber":298,"author":{"gitId":"TeoHaoZhi"},"content":"will be used to check if such a user exists for the system","lastModifiedDate":"2023-10-20"},{"lineNumber":299,"author":{"gitId":"TeoHaoZhi"},"content":"and log the user in.","lastModifiedDate":"2023-10-20"},{"lineNumber":300,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":301,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":302,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-20"},{"lineNumber":303,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":304,"author":{"gitId":"TeoHaoZhi"},"content":"login","lastModifiedDate":"2023-10-20"},{"lineNumber":305,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":306,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-20"},{"lineNumber":307,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":308,"author":{"gitId":"TeoHaoZhi"},"content":"`login`","lastModifiedDate":"2023-10-20"},{"lineNumber":309,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":310,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-20"},{"lineNumber":311,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":312,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":313,"author":{"gitId":"TeoHaoZhi"},"content":"Login Sucessful","lastModifiedDate":"2023-10-20"},{"lineNumber":314,"author":{"gitId":"TeoHaoZhi"},"content":"Welcome Back!","lastModifiedDate":"2023-10-20"},{"lineNumber":315,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":316,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":317,"author":{"gitId":"TeoHaoZhi"},"content":"### `save` - save existing drugs onto hard drive of computer","lastModifiedDate":"2023-10-21"},{"lineNumber":318,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":319,"author":{"gitId":"TeoHaoZhi"},"content":"Saves existing drugs onto hard drive of computer. The txt file","lastModifiedDate":"2023-10-21"},{"lineNumber":320,"author":{"gitId":"TeoHaoZhi"},"content":"is then used as reference to update drug inventory when stocker ","lastModifiedDate":"2023-10-21"},{"lineNumber":321,"author":{"gitId":"TeoHaoZhi"},"content":"is booted up.","lastModifiedDate":"2023-10-21"},{"lineNumber":322,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":323,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-21"},{"lineNumber":324,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":325,"author":{"gitId":"TeoHaoZhi"},"content":"save","lastModifiedDate":"2023-10-21"},{"lineNumber":326,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":327,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-21"},{"lineNumber":328,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":329,"author":{"gitId":"TeoHaoZhi"},"content":"`save`","lastModifiedDate":"2023-10-21"},{"lineNumber":330,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":331,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-21"},{"lineNumber":332,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":333,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-21"},{"lineNumber":334,"author":{"gitId":"TeoHaoZhi"},"content":"Drugs successfully saved.","lastModifiedDate":"2023-10-21"},{"lineNumber":335,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-21"},{"lineNumber":336,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":337,"author":{"gitId":"TeoHaoZhi"},"content":"### `addVendor` - adds a vendor into list of vendors being tracked by system","lastModifiedDate":"2023-10-29"},{"lineNumber":338,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":339,"author":{"gitId":"TeoHaoZhi"},"content":"Adds a vendor to be tracked by the system. The enteries are used to form a list of summarised vendors.","lastModifiedDate":"2023-10-29"},{"lineNumber":340,"author":{"gitId":"TeoHaoZhi"},"content":"is booted up.","lastModifiedDate":"2023-10-29"},{"lineNumber":341,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":342,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":343,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":344,"author":{"gitId":"TeoHaoZhi"},"content":"addVendor DRUGNAME","lastModifiedDate":"2023-10-29"},{"lineNumber":345,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":346,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":347,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":348,"author":{"gitId":"TeoHaoZhi"},"content":"`addVendor Moderna`","lastModifiedDate":"2023-10-29"},{"lineNumber":349,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":350,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-29"},{"lineNumber":351,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":352,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":353,"author":{"gitId":"TeoHaoZhi"},"content":"New vendor added into the vendors list: Moderna","lastModifiedDate":"2023-10-29"},{"lineNumber":354,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":355,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":356,"author":{"gitId":"TeoHaoZhi"},"content":"### `listVendors` - list all vendors currently being tracked by the system","lastModifiedDate":"2023-10-29"},{"lineNumber":357,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":358,"author":{"gitId":"TeoHaoZhi"},"content":"Displays a list of all vendors currently being tracked by the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":359,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":360,"author":{"gitId":"TeoHaoZhi"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":361,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":362,"author":{"gitId":"TeoHaoZhi"},"content":"listVendors","lastModifiedDate":"2023-10-29"},{"lineNumber":363,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":364,"author":{"gitId":"TeoHaoZhi"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":365,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":366,"author":{"gitId":"TeoHaoZhi"},"content":"`listVendors`","lastModifiedDate":"2023-10-29"},{"lineNumber":367,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":368,"author":{"gitId":"TeoHaoZhi"},"content":"Expected outcome:","lastModifiedDate":"2023-10-29"},{"lineNumber":369,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":370,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":371,"author":{"gitId":"TeoHaoZhi"},"content":"|| 1. Name : Moderna","lastModifiedDate":"2023-10-29"},{"lineNumber":372,"author":{"gitId":"TeoHaoZhi"},"content":"||","lastModifiedDate":"2023-10-29"},{"lineNumber":373,"author":{"gitId":"TeoHaoZhi"},"content":"||Listed all vendors in the list.","lastModifiedDate":"2023-10-29"},{"lineNumber":374,"author":{"gitId":"TeoHaoZhi"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":375,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":377,"author":{"gitId":"TeoHaoZhi"},"content":"**Q**: Can i register with blank username and password","lastModifiedDate":"2023-10-17"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":379,"author":{"gitId":"TeoHaoZhi"},"content":"**A**: No. Ensure your entries are not blank.","lastModifiedDate":"2023-10-17"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":381,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":383,"author":{"gitId":"TeoHaoZhi"},"content":"* add : `add /n DRUG_NAME /d EXPIRY_DATE /q QUANTITY`","lastModifiedDate":"2023-10-10"},{"lineNumber":384,"author":{"gitId":"TeoHaoZhi"},"content":"* delete : `delete /n DRUG_NAME`","lastModifiedDate":"2023-10-10"},{"lineNumber":385,"author":{"gitId":"TeoHaoZhi"},"content":"* list : `list`","lastModifiedDate":"2023-10-10"},{"lineNumber":386,"author":{"gitId":"Barbaracwx"},"content":"* find : `find /n KEYWORD` or `find /d KEYWORD`","lastModifiedDate":"2023-10-20"},{"lineNumber":387,"author":{"gitId":"TeoHaoZhi"},"content":"* help : `help`","lastModifiedDate":"2023-10-10"},{"lineNumber":388,"author":{"gitId":"TeoHaoZhi"},"content":"* register : `register`","lastModifiedDate":"2023-10-20"},{"lineNumber":389,"author":{"gitId":"TeoHaoZhi"},"content":"* login : `login`","lastModifiedDate":"2023-10-20"},{"lineNumber":390,"author":{"gitId":"TeoHaoZhi"},"content":"* save : `save`","lastModifiedDate":"2023-10-21"},{"lineNumber":391,"author":{"gitId":"TeoHaoZhi"},"content":"* add Vendor : `addVendor`","lastModifiedDate":"2023-10-29"},{"lineNumber":392,"author":{"gitId":"TeoHaoZhi"},"content":"* list Vendor : `listVendors`","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"TeoHaoZhi":297,"-":31,"Barbaracwx":64}},{"path":"docs/team/Azfarul.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"azfarulmatin"},"content":"# Azfarul Matin - Project Portfolio Page","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"azfarulmatin"},"content":"## Overview","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"azfarulmatin"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"azfarulmatin":6}},{"path":"docs/team/Barbara.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"# Barbara Chong - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"Barbaracwx":6}},{"path":"docs/team/HaoZhi.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"# Hao Zhi - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"TeoHaoZhi":6}},{"path":"docs/team/Karishma.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"karishma-t"},"content":"# Karishma - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"karishma-t"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"karishma-t"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"karishma-t":5}},{"path":"docs/team/Martin.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"# Martin Schneider - Project Portfolio Page","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"## Overview","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"martinschnder":5}},{"path":"src/main/java/seedu/stocker/Stocker.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.authentication.LoginSystem;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.ui.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.parser.Parser;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.Command;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.ExitCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.VendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"public class Stocker {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" private Ui ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" private Inventory inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" private SalesList salesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" private Cart currentCart;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" private VendorsList vendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" private Storage storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public static void main(String[] launchArgs) throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" new Stocker().run();","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" * Runs Login System.","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" public boolean startLogin() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" ui.showLoginMessage();","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" LoginSystem system \u003d new LoginSystem();","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" system.run();","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"martinschnder"},"content":" return system.loginStatus;","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" * Runs the program until termination.","lastModifiedDate":"2023-10-11"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" public void run() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" start();","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" runCommandLoopUntilExitCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" exit();","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" * Sets up the required objects, and prints the welcome message.","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":" private void start() {","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"martinschnder"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" this.inventory \u003d new Inventory();","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"martinschnder"},"content":" this.salesList \u003d new SalesList();","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"martinschnder"},"content":" this.currentCart \u003d new Cart();","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" this.vendorsList \u003d new VendorsList();","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"martinschnder"},"content":" this.storage \u003d new Storage(inventory);","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" storage.loadFileContents(\"drugs.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":" boolean checker \u003d startLogin();","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" assert checker \u003d\u003d true;","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":" if(checker){","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"martinschnder"},"content":" ui.showInitFailedMessage();","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":" System.exit(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"martinschnder"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" * Prints the Goodbye message and exits.","lastModifiedDate":"2023-10-11"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":81,"author":{"gitId":"martinschnder"},"content":" private void exit() {","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"martinschnder"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"martinschnder"},"content":" System.exit(0);","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" * Reads the user command and executes it, until the user issues the exit command.","lastModifiedDate":"2023-10-11"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":" private void runCommandLoopUntilExitCommand() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"martinschnder"},"content":" Command command;","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"martinschnder"},"content":" do {","lastModifiedDate":"2023-10-09"},{"lineNumber":92,"author":{"gitId":"martinschnder"},"content":" String userCommandText \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":93,"author":{"gitId":"martinschnder"},"content":" command \u003d new Parser().parseCommand(userCommandText);","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"martinschnder"},"content":" CommandResult result \u003d executeCommand(command);","lastModifiedDate":"2023-10-09"},{"lineNumber":95,"author":{"gitId":"martinschnder"},"content":" ui.showResultToUser(result);","lastModifiedDate":"2023-10-09"},{"lineNumber":96,"author":{"gitId":"Barbaracwx"},"content":" assert !ExitCommand.isExit((command));","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"martinschnder"},"content":" } while (!ExitCommand.isExit(command));","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":103,"author":{"gitId":"martinschnder"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2023-10-09"},{"lineNumber":104,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":105,"author":{"gitId":"martinschnder"},"content":" * @param command user command","lastModifiedDate":"2023-10-09"},{"lineNumber":106,"author":{"gitId":"martinschnder"},"content":" * @return result of the command","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":" private CommandResult executeCommand(Command command) throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"martinschnder"},"content":" command.setData(inventory, salesList, currentCart);","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"martinschnder"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-09"},{"lineNumber":111,"author":{"gitId":"martinschnder"},"content":" return result;","lastModifiedDate":"2023-10-09"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":113,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"martinschnder":64,"TeoHaoZhi":42,"-":6,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/authentication/LoginSystem.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.authentication;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.ui.Ui;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" * Represents a login system used for authentication of users.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" * User information is saved within a hashtable and uploaded","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" * into txt file for future reference.","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"public class LoginSystem {","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" public boolean loginStatus;","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" private Ui interactor;","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" private final HashMap\u003cString, String\u003e users;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public LoginSystem() throws IOException {","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" users \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" loginStatus \u003d false;","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" this.in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" interactor \u003d new Ui();","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" File holder \u003d new File(\"./users.txt\");","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" if (!holder.exists()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" holder.createNewFile();","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" * Returns user choice of whether they wish to register a new user","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" * or if they would want to login using an existing user.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":" * @return choice of user to login or register","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws StockerException if register or login is not inputted","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" public String authenticateUserChoice() throws StockerException{","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" try {","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":" while (in.hasNextLine()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":" String choice \u003d in.nextLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":" if (choice.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":" return \"register\";","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (choice.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"TeoHaoZhi"},"content":" return \"login\";","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":" throw new StockerException();","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":" } catch (StockerException e) {","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showInvalidChoiceMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":" return authenticateUserChoice();","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":" return \"error\";","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":" * Creates a new user with input username and password from user.","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":" * Username and password are saved into a txt file for future","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":" * reference.","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if inappropriate output is entered.","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":" public void newUserCreator() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showUsernameMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" String username \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" while (username.equals(\"\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showBlankNameMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" username \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":" String password \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" while (password.equals(\"\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showBlankPasswordMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":" password \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" assert(username.equals(\"\") \u003d\u003d false);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" assert (password.equals(\"\") \u003d\u003d false);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":" if (users.containsKey(username)) {","lastModifiedDate":"2023-10-11"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showUserAlreadyExistMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":" System.out.println();","lastModifiedDate":"2023-10-11"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showEnterChoiceAgainMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":99,"author":{"gitId":"TeoHaoZhi"},"content":" String reselect \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":100,"author":{"gitId":"TeoHaoZhi"},"content":" if (reselect.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":103,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":104,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (reselect.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":106,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":107,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":" users.put(username, password);","lastModifiedDate":"2023-10-11"},{"lineNumber":109,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showSuccessfulRegistrationMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"TeoHaoZhi"},"content":" loginStatus \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":111,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":112,"author":{"gitId":"TeoHaoZhi"},"content":" writeNewUserToFile();","lastModifiedDate":"2023-10-11"},{"lineNumber":113,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":114,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":115,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":116,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"TeoHaoZhi"},"content":" * Login existing user by asking for username and password input","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"TeoHaoZhi"},"content":" * from user.","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if inappropriate input is entered.","lastModifiedDate":"2023-10-14"},{"lineNumber":121,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":122,"author":{"gitId":"TeoHaoZhi"},"content":" public void loginExistingUser() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":123,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":124,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":125,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showUsernameMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":126,"author":{"gitId":"TeoHaoZhi"},"content":" String usernameInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":128,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":129,"author":{"gitId":"TeoHaoZhi"},"content":" String passwordInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":131,"author":{"gitId":"TeoHaoZhi"},"content":" if (!users.containsKey(usernameInput)) {","lastModifiedDate":"2023-10-11"},{"lineNumber":132,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showInvalidUsernameOrPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":133,"author":{"gitId":"TeoHaoZhi"},"content":" System.out.println();","lastModifiedDate":"2023-10-11"},{"lineNumber":134,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showEnterChoiceAgainMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":135,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":136,"author":{"gitId":"TeoHaoZhi"},"content":" String reselect \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":137,"author":{"gitId":"TeoHaoZhi"},"content":" if (reselect.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":138,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":139,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":140,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (reselect.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":142,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":143,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":144,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":145,"author":{"gitId":"TeoHaoZhi"},"content":" if (users.get(usernameInput).equals(passwordInput)) {","lastModifiedDate":"2023-10-11"},{"lineNumber":146,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showSuccessfulLoginMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":147,"author":{"gitId":"TeoHaoZhi"},"content":" loginStatus \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":148,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":149,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showInvalidUsernameOrPasswordMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":150,"author":{"gitId":"TeoHaoZhi"},"content":" System.out.println();","lastModifiedDate":"2023-10-11"},{"lineNumber":151,"author":{"gitId":"TeoHaoZhi"},"content":" interactor.showEnterChoiceAgainMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":152,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":153,"author":{"gitId":"TeoHaoZhi"},"content":" String reselect \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":154,"author":{"gitId":"TeoHaoZhi"},"content":" if (reselect.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":155,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":156,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":157,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (reselect.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":158,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":159,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":160,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":161,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":162,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":163,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":165,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":166,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":167,"author":{"gitId":"TeoHaoZhi"},"content":" * Writes new user creation into a txt file to save for future reference","lastModifiedDate":"2023-10-14"},{"lineNumber":168,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":169,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException","lastModifiedDate":"2023-10-14"},{"lineNumber":170,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":171,"author":{"gitId":"TeoHaoZhi"},"content":" public void writeNewUserToFile() throws IOException {","lastModifiedDate":"2023-10-11"},{"lineNumber":172,"author":{"gitId":"TeoHaoZhi"},"content":" BufferedWriter writer \u003d new BufferedWriter(new FileWriter(\"./users.txt\", true));","lastModifiedDate":"2023-10-11"},{"lineNumber":173,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":174,"author":{"gitId":"TeoHaoZhi"},"content":" for (Map.Entry\u003cString, String\u003e entry :","lastModifiedDate":"2023-10-11"},{"lineNumber":175,"author":{"gitId":"TeoHaoZhi"},"content":" users.entrySet()) {","lastModifiedDate":"2023-10-11"},{"lineNumber":176,"author":{"gitId":"TeoHaoZhi"},"content":" // put key and value separated by a colon","lastModifiedDate":"2023-10-11"},{"lineNumber":177,"author":{"gitId":"TeoHaoZhi"},"content":" writer.write(entry.getKey() + \":\"","lastModifiedDate":"2023-10-11"},{"lineNumber":178,"author":{"gitId":"TeoHaoZhi"},"content":" + entry.getValue());","lastModifiedDate":"2023-10-11"},{"lineNumber":179,"author":{"gitId":"TeoHaoZhi"},"content":" // new line","lastModifiedDate":"2023-10-11"},{"lineNumber":180,"author":{"gitId":"TeoHaoZhi"},"content":" writer.newLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":181,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":182,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":183,"author":{"gitId":"TeoHaoZhi"},"content":" writer.flush();","lastModifiedDate":"2023-10-11"},{"lineNumber":184,"author":{"gitId":"TeoHaoZhi"},"content":" writer.close();","lastModifiedDate":"2023-10-11"},{"lineNumber":185,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":186,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":187,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":188,"author":{"gitId":"TeoHaoZhi"},"content":" * Loads existing users from txt file into hash table","lastModifiedDate":"2023-10-14"},{"lineNumber":189,"author":{"gitId":"TeoHaoZhi"},"content":" * for login system to use for authentication when","lastModifiedDate":"2023-10-14"},{"lineNumber":190,"author":{"gitId":"TeoHaoZhi"},"content":" * user tries to login.","lastModifiedDate":"2023-10-14"},{"lineNumber":191,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":192,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if fail to read from txt file","lastModifiedDate":"2023-10-14"},{"lineNumber":193,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":194,"author":{"gitId":"TeoHaoZhi"},"content":" public void loadExistingUsers() throws IOException {","lastModifiedDate":"2023-10-11"},{"lineNumber":195,"author":{"gitId":"TeoHaoZhi"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(\"./users.txt\"));","lastModifiedDate":"2023-10-11"},{"lineNumber":196,"author":{"gitId":"TeoHaoZhi"},"content":" String line;","lastModifiedDate":"2023-10-11"},{"lineNumber":197,"author":{"gitId":"TeoHaoZhi"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-10-11"},{"lineNumber":198,"author":{"gitId":"TeoHaoZhi"},"content":" String[] parts \u003d line.split(\":\", 2);","lastModifiedDate":"2023-10-11"},{"lineNumber":199,"author":{"gitId":"TeoHaoZhi"},"content":" if (parts.length \u003e\u003d 2) {","lastModifiedDate":"2023-10-11"},{"lineNumber":200,"author":{"gitId":"TeoHaoZhi"},"content":" String key \u003d parts[0];","lastModifiedDate":"2023-10-11"},{"lineNumber":201,"author":{"gitId":"TeoHaoZhi"},"content":" String value \u003d parts[1];","lastModifiedDate":"2023-10-11"},{"lineNumber":202,"author":{"gitId":"TeoHaoZhi"},"content":" users.put(key, value);","lastModifiedDate":"2023-10-11"},{"lineNumber":203,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":204,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":205,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":206,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":207,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":208,"author":{"gitId":"TeoHaoZhi"},"content":" * Runs login system by loading user information into hash table","lastModifiedDate":"2023-10-14"},{"lineNumber":209,"author":{"gitId":"TeoHaoZhi"},"content":" * and get input for user to check for authentication.","lastModifiedDate":"2023-10-14"},{"lineNumber":210,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":211,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if unable to read from txt file to","lastModifiedDate":"2023-10-14"},{"lineNumber":212,"author":{"gitId":"TeoHaoZhi"},"content":" * load users","lastModifiedDate":"2023-10-14"},{"lineNumber":213,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":214,"author":{"gitId":"TeoHaoZhi"},"content":" public void run() throws IOException, StockerException {","lastModifiedDate":"2023-10-21"},{"lineNumber":215,"author":{"gitId":"TeoHaoZhi"},"content":" loadExistingUsers();","lastModifiedDate":"2023-10-11"},{"lineNumber":216,"author":{"gitId":"TeoHaoZhi"},"content":" String choice \u003d authenticateUserChoice();","lastModifiedDate":"2023-10-11"},{"lineNumber":217,"author":{"gitId":"TeoHaoZhi"},"content":" if (choice.equals(\"register\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":218,"author":{"gitId":"TeoHaoZhi"},"content":" newUserCreator();","lastModifiedDate":"2023-10-11"},{"lineNumber":219,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":220,"author":{"gitId":"TeoHaoZhi"},"content":" } else if (choice.equals(\"login\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":221,"author":{"gitId":"TeoHaoZhi"},"content":" loginExistingUser();","lastModifiedDate":"2023-10-11"},{"lineNumber":222,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":223,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":224,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":225,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":226,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"TeoHaoZhi":226}},{"path":"src/main/java/seedu/stocker/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" * Adds a drug into the inventory","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a new drug to the drug list. \"","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Parameters: NAME, EXPIRY DATE, QUANTITY, \" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" + \" /n Doliprane /d 12/06/2035 /q 52\";","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New drug added in the inventory: %1$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" private final Drug toAdd;","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" private final long quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" public AddCommand(String name, String expiryDate, Long quantity) {","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.toAdd \u003d new Drug(name, expiryDate);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" public Drug getDrug() {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" return this.toAdd;","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" inventory.addNewDrug(toAdd.getName(), toAdd, quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS, toAdd.getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":33,"TeoHaoZhi":2,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/AddToCartCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" * Adds a certain quantity of one drug into the current cart","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"public class AddToCartCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"addtocart\";","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD ","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" + \": Adds a new drug to the current cart. \"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" + \"Parameters: NAME, QUANTITY,\" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" + \" /n Doliprane /q 2\";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New drug added in the current cart: %1$s\";","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" private final String drugName;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" private final long quantity;","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public AddToCartCommand(String name, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.drugName \u003d name;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" StockEntry matchingEntry \u003d inventory.getStockEntries().stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" .filter(entry -\u003e entry","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" .getDrug().getName()","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" .equalsIgnoreCase(this.drugName) \u0026\u0026 ","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" entry.getQuantity() \u003e this.quantity)","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" .findAny()","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" .orElse(null);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" if (matchingEntry !\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" currentCart.addEntry(this.drugName, this.quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS, matchingEntry.getDrug().getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(\"This drug is not in stock. \");","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":40,"TeoHaoZhi":1,"Barbaracwx":4}},{"path":"src/main/java/seedu/stocker/commands/AddVendorCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.Vendor;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.VendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":" * Adds a vendor into the inventory","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"public class AddVendorCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"addVendor\";","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a new vendor to the vendors list. \"","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Parameter: NAME\" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + \" Moderna\";","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New vendor added in the vendors list: %1$s\";","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" private final Vendor toAdd;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" public AddVendorCommand(String name) {","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" this.toAdd \u003d new Vendor(name);","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" VendorsList.addNewVendor(toAdd);","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd.getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":31}},{"path":"src/main/java/seedu/stocker/commands/CheckOutCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" * Remove a drug from inventory and add it into the sales list","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"public class CheckOutCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"checkout\";","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Checks out current cart. \"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" + \"Parameters:\" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"The current cart has been checked out. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public CheckOutCommand() {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" currentCart.checkOut(salesList, inventory);","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS));","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":22,"TeoHaoZhi":1,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" protected Inventory inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" protected SalesList salesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" protected Cart currentCart;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" protected Command() {","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" public void setData(Inventory inventory, SalesList salesList, Cart currentCart) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" this.inventory \u003d inventory;","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" this.salesList \u003d salesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.currentCart \u003d currentCart;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" public abstract CommandResult execute() throws IOException, StockerException;","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":24,"TeoHaoZhi":5}},{"path":"src/main/java/seedu/stocker/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"// import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"public class CommandResult\u003cT\u003e {","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" * The feedback message to be shown to the user. Contains a description of the execution result","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":" * The list of drugs that was produced by the command","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" private final List\u003cT\u003e relevantElements;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public CommandResult(String feedbackToUser) {","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" relevantElements \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" public CommandResult(String feedbackToUser, List\u003cT\u003e relevantElements) {","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" this.relevantElements \u003d relevantElements;","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" * Returns a list of drugs that was produced by the command, if any.","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" public Optional\u003cList\u003cT\u003e\u003e getRelevantElements() {","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" return Optional.ofNullable(relevantElements);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" public String getFeedbackToUserFindTest() {","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" if (relevantElements !\u003d null) {","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" StringBuilder feedback \u003d new StringBuilder();","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":" for (int i \u003d 0; i \u003c relevantElements.size(); i++) {","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(i + 1).append(\". \").append(relevantElements.get(i));","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(System.lineSeparator());","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(System.lineSeparator());","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"Barbaracwx"},"content":" feedback.append(feedbackToUser);","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"Barbaracwx"},"content":" return feedback.toString();","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"Barbaracwx"},"content":" return feedbackToUser;","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":34,"Barbaracwx":21}},{"path":"src/main/java/seedu/stocker/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.exceptions.DrugNotFoundException;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Removes a drug from drug list. \"","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Parameters: Name \" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \" \u003cDrug Name\u003e\";","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Drug removed from inventory: %1$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_FAILURE \u003d \"Drug not find in the inventory. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" private final String keyToDelete;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"karishma-t"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"karishma-t"},"content":" * Constructs a DeleteCommand with the specified drug name.","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"karishma-t"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"karishma-t"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" public DeleteCommand(String key) {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" this.keyToDelete \u003d key.trim().toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"karishma-t"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"karishma-t"},"content":" * Executes the \u0027delete\u0027 command, removing a drug from the inventory list by name.","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"karishma-t"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"karishma-t"},"content":" * @return A CommandResult indicating the result of the deletion operation.","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"karishma-t"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":" StockEntry deletedEntry \u003d inventory.deleteDrug(this.keyToDelete);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_SUCCESS, deletedEntry.getDrug().getName()));","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" } catch (DrugNotFoundException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_FAILURE);","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"karishma-t"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"karishma-t":14,"martinschnder":9,"TeoHaoZhi":19,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" * Terminates the program.","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Exits the program.\"+ System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_EXIT_ACKNOWEDGEMENT \u003d \"Exiting Stocker as requested ...\";","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_EXIT_ACKNOWEDGEMENT);","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" return command instanceof ExitCommand; // instanceof returns false if it is null","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":19,"TeoHaoZhi":2,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" * Represents a command to find drugs in the inventory that match a given keyword.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" * Usage message for the \u0027find\u0027 command.","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \" /n\" + \": Finds drug in inventory using name.\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" \"Example: \" + COMMAND_WORD + \" /n panadol\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" COMMAND_WORD + \" /d\" + \": Finds drug in inventory using date.\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" \"Example: \" + COMMAND_WORD + \" /d panadol\" ;","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" * Success message displayed after successfully finding drugs in the inventory.","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all drugs with the keyword in the inventory.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":" private final String keyword;","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" private final String criterion;","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" * Creates a FindCommand with the specified keyword.","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" * @param keyword The keyword to search for in the inventory.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" public FindCommand(String keyword, String criterion) {","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":" this.keyword \u003d keyword.toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" this.criterion \u003d criterion;","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":" private static boolean matches(String criterion, String keyword, StockEntry entry) {","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" if (criterion.equals(\"/n\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" return entry.getDrug().getName().toLowerCase().contains(keyword);","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" return entry.getDrug().getExpiryDate().toLowerCase().contains(keyword);","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"Barbaracwx"},"content":" * Executes the \u0027find\u0027 command, searching for drugs that match the keyword.","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"Barbaracwx"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"Barbaracwx"},"content":" * @return A CommandResult containing the outcome of the command execution.","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"Barbaracwx"},"content":" if (keyword \u003d\u003d null || keyword.trim().isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(String.format(MESSAGE_INVALID_COMMAND_FORMAT, MESSAGE_USAGE));","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e entries \u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e foundEntries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" for (StockEntry entry : entries) {","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" if (matches(this.criterion, this.keyword, entry)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" foundEntries.add(entry);","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, foundEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":15,"TeoHaoZhi":12,"Barbaracwx":52}},{"path":"src/main/java/seedu/stocker/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Shows help instructions.","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Shows program usage instructions. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" System.lineSeparator() + AddCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + DeleteCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + HelpCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + ListCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" + System.lineSeparator() + ShowStockLevelCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + FindCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator() + AddToCartCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator() + CheckOutCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator() + ViewCartCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + LoginCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + RegisterCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + SaveCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + AddVendorCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + ListVendorCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator() + ExitCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":" );","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":21,"TeoHaoZhi":25,"Barbaracwx":3}},{"path":"src/main/java/seedu/stocker/commands/IncorrectCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Represents an incorrect command. Upon execution, produces some feedback to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public IncorrectCommand(String feedbackToUser) {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(feedbackToUser);","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":17,"TeoHaoZhi":1,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"azfarulmatin"},"content":"import java.util.List;","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"azfarulmatin"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"azfarulmatin"},"content":" * Represents a command to list all drugs in the inventory.","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"azfarulmatin"},"content":" * This command retrieves the list of drugs from the inventory and provides it as part of the command result.","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"azfarulmatin"},"content":" * If the inventory is empty, it informs the user that the inventory has no drugs.","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"azfarulmatin"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": List all drug information that is being \"","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + \"tracked by the system. \" + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"azfarulmatin"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all drugs in the inventory.\";","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"azfarulmatin"},"content":" * Executes the list command.","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"azfarulmatin"},"content":" * @return A CommandResult containing the success message and the list of drugs.","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"azfarulmatin"},"content":" // Assertion: Check if the inventory is properly initialised","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"azfarulmatin"},"content":" assert inventory !\u003d null : \"Inventory should be initialised before executing ListCommand.\";","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"azfarulmatin"},"content":" // Retrieve the list of drugs from the inventory","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e stockEntries \u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"azfarulmatin"},"content":" // Check if the inventory is empty","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" if (stockEntries.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"azfarulmatin"},"content":" // Return a CommandResult indicating that the inventory is empty","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(\"The inventory is empty.\");","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"azfarulmatin"},"content":" } else {","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"azfarulmatin"},"content":" // Return a CommandResult with the success message and the list of drugs","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, stockEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":3,"azfarulmatin":25,"TeoHaoZhi":13,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/commands/ListVendorCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.Vendor;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.vendors.VendorsList;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" * Generates a list of vendors tracked by system","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"public class ListVendorCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"listVendors\";","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": List all vendor information that is being \"","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + \"tracked by the system.\" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all vendors in the list.\";","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" * Executes the list command.","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" * @return A CommandResult containing the success message and the list of drugs.","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" // Retrieve the list of drugs from the inventory","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" List\u003cVendor\u003e vendorEntries \u003d VendorsList.getVendorEntries();","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" // Check if the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" if (vendorEntries.isEmpty()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" // Return a CommandResult indicating that the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" return new CommandResult\u003c\u003e(\"The inventory is empty.\");","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" // Return a CommandResult with the success message and the list of drugs","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, vendorEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":40}},{"path":"src/main/java/seedu/stocker/commands/LoginCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.authentication.LoginSystem;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" * Login existing user into system.","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"public class LoginCommand extends Command {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"login\";","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Login new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Welcome back!\" ;","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() throws IOException, StockerException {","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" LoginSystem system \u003d new LoginSystem();","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" system.loadExistingUsers();","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" system.loginExistingUser();","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS);","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"TeoHaoZhi":28,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/RegisterCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.authentication.LoginSystem;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.exceptions.StockerException;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" * Registers new user into login system.","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"public class RegisterCommand extends Command {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"register\";","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Register new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New User Created.\";","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() throws IOException, StockerException {","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" LoginSystem system \u003d new LoginSystem();","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" system.loadExistingUsers();","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" system.newUserCreator();","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS);","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"TeoHaoZhi":26,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/SaveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.List;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" * Backups existing drug list inventory into txt file to be uploaded later.","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"public class SaveCommand extends Command{","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String COMMAND_WORD \u003d \"save\";","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Saves existing druglist that is loaded \"","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" +\"into inventory when system is booted up.\"","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + System.lineSeparator()","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Drugs successfully saved.\";","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() throws IOException {","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" File holder \u003d new File(\"./drugs.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" if (!holder.exists()) {","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" holder.createNewFile();","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" List\u003cStockEntry\u003e entries\u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" Storage storageManager \u003d new Storage(inventory);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" storageManager.writeToFile(\"drugs.txt\", \"\");","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" for(int i \u003d 0; i \u003c entries.size(); i +\u003d 1){","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" storageManager.appendToFile(\"drugs.txt\",entries.get(i).toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"martinschnder":5,"TeoHaoZhi":33,"Barbaracwx":1}},{"path":"src/main/java/seedu/stocker/commands/SetThresholdCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"public class SetThresholdCommand extends Command {","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":" public static final String COMMAND_WORD \u003d \"setthreshold\";","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" + \": Set the threshold quantity for a drug. \"","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":" + \"(default 100)\" + System.lineSeparator()","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: \" + COMMAND_WORD + \" /n Doliprane /tq 50\";","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Threshold quantity set for %1$s: %2$d\";","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" private final String drugName;","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" private final long threshold;","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" public SetThresholdCommand(String name, long threshold) {","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" this.drugName \u003d name;","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" this.threshold \u003d threshold;","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" public SetThresholdCommand(String name) {","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" this.drugName \u003d name;","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" this.threshold \u003d 100; // Default threshold value","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":" @Override","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" public CommandResult execute(){","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"Barbaracwx"},"content":" StockEntry stockEntry \u003d inventory.getStockEntry(drugName);","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" if (stockEntry !\u003d null) {","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" stockEntry.setThresholdQuantity(threshold);","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, drugName, threshold));","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult(\"Drug not found.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"Barbaracwx":42}},{"path":"src/main/java/seedu/stocker/commands/ShowStockLevelCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.StockEntry;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import java.util.Comparator;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"/**","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":" * Represents a command to display a report of stock levels sorted by quantity in ascending order.","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"public class ShowStockLevelCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" public static final String COMMAND_WORD \u003d \"stocklevel\";","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": List all drugs by quantity level \"","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" + \"tracked by the system in ascending order. \" + System.lineSeparator()","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Stock Level Report (Sorted by Quantity)\";","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" * Executes the \"stocklevel\" command. Displays a report of stock levels sorted by quantity in ascending order.","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" * @return A CommandResult containing the success message and a list of stock entries sorted by quantity.","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" // Assertion: Check if the inventory is properly initialized","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":" assert inventory !\u003d null : \"Inventory should be initialized before executing ShowStockLevelCommand.\";","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" // Retrieve the list of drugs from the inventory","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"Barbaracwx"},"content":" List\u003cStockEntry\u003e stockEntries \u003d inventory.getStockEntries();","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" // Check if the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" if (stockEntries.isEmpty()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" // Return a CommandResult indicating that the inventory is empty","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(\"The inventory is empty.\");","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" // Sort the stockEntries by quantity in ascending order","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" stockEntries.sort(Comparator.comparingLong(StockEntry::getQuantity));","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" // Create a new list to store the sorted stockEntries","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" List\u003cStockEntry\u003e arrangedListbyQuantity \u003d new ArrayList\u003c\u003e(stockEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_SUCCESS, arrangedListbyQuantity);","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":1,"Barbaracwx":46}},{"path":"src/main/java/seedu/stocker/commands/ViewCartCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" * Represents a command to list all drugs in the current cart.","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" * This command retrieves the list of drugs from the current cart and provides it as part of the command result.","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" * If the inventory is empty, it informs the user that the inventory has no drugs.","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"public class ViewCartCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" public static final String COMMAND_WORD \u003d \"viewcart\";","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" + \": View the current cart items.\" + System.lineSeparator()","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_SUCCESS \u003d \"Listed all the content of your cart. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_FAILURE \u003d \"Your cart is empty. \";","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" * Execute the ViewCartCommand","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" if (currentCart.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" return new CommandResult\u003c\u003e(MESSAGE_FAILURE);","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" return new CommandResult(MESSAGE_SUCCESS, currentCart.getCurrentCart());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":29,"TeoHaoZhi":1,"Barbaracwx":2}},{"path":"src/main/java/seedu/stocker/common/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.common;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Container for user visible messages.","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class Messages {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_WELCOME \u003d \"Welcome to your Stocker!\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_GOODBYE \u003d \"Good bye!\";","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_LOGIN_WELCOME \u003d \"Welcome! \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Key in register or login based on your needs \\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \"1.Register user \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" + \"2.Login\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USERNAME_INPUT \u003d \"Enter your username:\";","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_PASSWORD_INPUT \u003d \"Enter Your Password:\";","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESSFUL_REGISTRATION \u003d \"Registration successful.\";","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_SUCCESSFUL_LOGIN \u003d \"Login successful.\";","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_INVALID_CHOICE \u003d \"Invalid Input, enter register or login only!\";","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_USER_ALREADY_EXIST \u003d \"User already exists. Please make user with \"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" + \"different name or login instead\";","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_INVALID_USERNAME_OR_PASSWORD \u003d \"Invalid username or password. Please try again.\";","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_NO_BLANK_NAME_ALLOWED \u003d \"No blank name allowed. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Enter your desired username again\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" public static final String MESSAGE_NO_BLANK_PASSWORD_ALLOWED \u003d \"No blank password allowed. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Enter your desired password again\";","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" public static final String MESSAGE_INIT_FAILED \u003d \"Failed to initialise Stocker application. Exiting...\";","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":13,"TeoHaoZhi":16}},{"path":"src/main/java/seedu/stocker/drugs/Cart.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class Cart {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" private ArrayList\u003cCartEntry\u003e entries;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" public Cart() {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.entries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public void addEntry(String key, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" this.entries.add(new CartEntry(key, quantity));","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public List\u003cCartEntry\u003e getCurrentCart() {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" return this.entries;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" return entries.isEmpty();","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" public void checkOut(SalesList salesList, Inventory inventory) {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" salesList.addSale(this);","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" for (CartEntry entry : entries) {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" inventory.removeFromStock(entry.getKey(), entry.getQuantity());","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" this.entries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":32}},{"path":"src/main/java/seedu/stocker/drugs/CartEntry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"public class CartEntry {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" private String key;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":" private long quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public CartEntry(String key, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" this.key \u003d key;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public String getKey() {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" return this.key;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" public long getQuantity() {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" return this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" * Returns a string representation of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" * @return A string containing the key and quantity date of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" public String toString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" return \"Key: \" + this.key","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" + \", Quantity: \" + this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":31}},{"path":"src/main/java/seedu/stocker/drugs/Drug.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"public class Drug {","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":" public String name;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":" String expiryDate;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" public Drug(String name, String expiryDate) {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" this.expiryDate \u003d expiryDate;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"azfarulmatin"},"content":" * Gets the name of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"azfarulmatin"},"content":" * @return The name of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"azfarulmatin"},"content":" public String getName() {","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"azfarulmatin"},"content":" return name;","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"azfarulmatin"},"content":" * Sets the name of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"azfarulmatin"},"content":" * @param name The new name to set for the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"azfarulmatin"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"azfarulmatin"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"azfarulmatin"},"content":" * Gets the expiry date of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"azfarulmatin"},"content":" * @return The expiry date of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"azfarulmatin"},"content":" public String getExpiryDate() {","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"azfarulmatin"},"content":" return expiryDate;","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"azfarulmatin"},"content":" * Sets the expiry date of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"azfarulmatin"},"content":" * @param expiryDate The new expiry date to set for the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"azfarulmatin"},"content":" public void setExpiryDate(String expiryDate) {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"azfarulmatin"},"content":" this.expiryDate \u003d expiryDate;","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"azfarulmatin"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"azfarulmatin"},"content":" * Returns a string representation of the drug.","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"azfarulmatin"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" * @return A string containing the name and expiry date of the drug.","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"azfarulmatin"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"azfarulmatin"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"azfarulmatin"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":" return \"Name: \" + name + \", Expiry Date: \" + expiryDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"martinschnder":5,"azfarulmatin":43,"TeoHaoZhi":11}},{"path":"src/main/java/seedu/stocker/drugs/Inventory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"import java.util.List;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.exceptions.DrugNotFoundException;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"public class Inventory {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" public HashMap\u003cString, StockEntry\u003e stock;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public Inventory() {","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" this.stock \u003d new HashMap\u003cString, StockEntry\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public void addNewDrug(String key, Drug drug, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" this.stock.put(key, new StockEntry(drug, quantity));","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" public void removeFromStock(String key, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" this.stock.get(key).decrQuantity(quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" public List\u003cStockEntry\u003e getStockEntries() {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":" return this.stock.values().stream()","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":" .collect(Collectors.toCollection(ArrayList::new));","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"martinschnder"},"content":" public StockEntry deleteDrug(String key) throws DrugNotFoundException {","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" if (this.stock.containsKey(key)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" return stock.remove(key);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" throw new DrugNotFoundException(\"\");","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" public StockEntry getStockEntry(String drugName) {","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" for (StockEntry stockEntry : stock.values()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" if (stockEntry.getDrug().getName().equalsIgnoreCase(drugName)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" return stockEntry;","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" return null; // Drug not found in inventory","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":35,"azfarulmatin":3,"Barbaracwx":10}},{"path":"src/main/java/seedu/stocker/drugs/SalesList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class SalesList {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" private ArrayList\u003cCart\u003e validatedCarts;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public SalesList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" this.validatedCarts \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public void addSale(Cart cart) {","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" this.validatedCarts.add(cart);","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" public List\u003cCart\u003e getAllSales() {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" return this.validatedCarts;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":22}},{"path":"src/main/java/seedu/stocker/drugs/StockEntry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.drugs;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"public class StockEntry {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":" private final Drug drug;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" private long quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":" private long thresholdQuantity;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":" public StockEntry(Drug drug, long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" this.drug \u003d drug;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" public Drug getDrug() {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" return this.drug;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" public long getQuantity() {","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" return this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public void setQuantity(long quantity) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" public void setThresholdQuantity(long thresholdQuantity) {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" this.thresholdQuantity \u003d thresholdQuantity;","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" public long getThresholdQuantity() {","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"Barbaracwx"},"content":" return this.thresholdQuantity;","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" public void incrQuantity(long delta) {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" this.quantity +\u003d delta;","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":" public void decrQuantity(long delta) {","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" assert(this.quantity \u003e delta);","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"martinschnder"},"content":" this.quantity -\u003d delta;","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":" * Returns a string representation of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":" * @return A string containing the key and quantity date of the stock entry.","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" public String toString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" return \"Name: \" + this.drug.getName()","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" + \", Expiry date: \" + this.drug.getExpiryDate()","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" + \", Quantity: \" + this.quantity;","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":45,"Barbaracwx":10}},{"path":"src/main/java/seedu/stocker/exceptions/DrugNotFoundException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.exceptions;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Signals that the drug has not been found in a specific list.","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class DrugNotFoundException extends Exception {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" public DrugNotFoundException(String message) {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" super(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":10}},{"path":"src/main/java/seedu/stocker/exceptions/InvalidDrugFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.exceptions;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":" * Signals that the laod function cannot read the serialized drug.","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"public class InvalidDrugFormatException extends Exception {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":" public InvalidDrugFormatException(String message) {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":" super(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"martinschnder":10}},{"path":"src/main/java/seedu/stocker/exceptions/StockerException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.exceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"public class StockerException extends Exception{","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"TeoHaoZhi":4}},{"path":"src/main/java/seedu/stocker/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.parser;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.AddCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.Command;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.DeleteCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.ExitCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.FindCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.HelpCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.IncorrectCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.ListCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.LoginCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.RegisterCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.SaveCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.AddVendorCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.ShowStockLevelCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.ViewCartCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.AddToCartCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.CheckOutCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.commands.ListVendorCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.commands.SetThresholdCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"martinschnder"},"content":"public class Parser {","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" public Parser() {","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"martinschnder"},"content":" * @param userInput full user input string","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"martinschnder"},"content":" * @return the command based on the user input","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" public Command parseCommand(String userInput) throws IOException {","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"content":" String[] words \u003d userInput.trim().split(\" \", 2); // split the input into command and arguments","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":" if (words.length \u003d\u003d 0) {","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":" final String commandWord \u003d words[0];","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":" final String arguments \u003d userInput.replaceFirst(commandWord, \"\").trim();","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"martinschnder"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" case AddCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" return prepareAddCommand(arguments);","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"Barbaracwx"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Barbaracwx"},"content":" return prepareFindCommand(arguments);","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" case AddToCartCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" return prepareAddToCartCommand(arguments);","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"karishma-t"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"karishma-t"},"content":" return new DeleteCommand(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"martinschnder"},"content":" case CheckOutCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"martinschnder"},"content":" return new CheckOutCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"martinschnder"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"martinschnder"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"martinschnder"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"martinschnder"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"azfarulmatin"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"azfarulmatin"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"azfarulmatin"},"content":" ","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":" case ViewCartCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"martinschnder"},"content":" return new ViewCartCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" case RegisterCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" return new RegisterCommand();","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" case LoginCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" return new LoginCommand();","lastModifiedDate":"2023-10-20"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" case SaveCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":" ","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":" case AddVendorCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" return prepareAddVendorCommand(arguments);","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"Barbaracwx"},"content":" case ShowStockLevelCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"Barbaracwx"},"content":" return new ShowStockLevelCommand();","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" case ListVendorCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-28"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" return new ListVendorCommand();","lastModifiedDate":"2023-10-28"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"Barbaracwx"},"content":" case SetThresholdCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"Barbaracwx"},"content":" return prepareSetThresholdCommand(arguments);","lastModifiedDate":"2023-10-29"},{"lineNumber":96,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"martinschnder"},"content":" default:","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":103,"author":{"gitId":"martinschnder"},"content":" * Parses arguments in the context of the add drug command.","lastModifiedDate":"2023-10-09"},{"lineNumber":104,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":105,"author":{"gitId":"martinschnder"},"content":" * @param args full command args string","lastModifiedDate":"2023-10-09"},{"lineNumber":106,"author":{"gitId":"martinschnder"},"content":" * @return the prepared command","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":108,"author":{"gitId":"martinschnder"},"content":" private Command prepareAddCommand(String args) {","lastModifiedDate":"2023-10-09"},{"lineNumber":109,"author":{"gitId":"martinschnder"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"martinschnder"},"content":" Pattern pattern \u003d Pattern.compile(\"/n (.*) /d (.*) /q (.*)\");","lastModifiedDate":"2023-10-09"},{"lineNumber":111,"author":{"gitId":"martinschnder"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-10-09"},{"lineNumber":112,"author":{"gitId":"martinschnder"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 3) {","lastModifiedDate":"2023-10-09"},{"lineNumber":113,"author":{"gitId":"martinschnder"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-09"},{"lineNumber":114,"author":{"gitId":"martinschnder"},"content":" String expiryDate \u003d matcher.group(2);","lastModifiedDate":"2023-10-09"},{"lineNumber":115,"author":{"gitId":"martinschnder"},"content":" Long quantity \u003d Long.parseLong(matcher.group(3));","lastModifiedDate":"2023-10-09"},{"lineNumber":116,"author":{"gitId":"martinschnder"},"content":" return new AddCommand(name, expiryDate, quantity);","lastModifiedDate":"2023-10-09"},{"lineNumber":117,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":118,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-09"},{"lineNumber":119,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":120,"author":{"gitId":"martinschnder"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"martinschnder"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":123,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"martinschnder"},"content":" * Parses arguments in the context of the add drug to cart command.","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"martinschnder"},"content":" * @param args full command args string","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"martinschnder"},"content":" * @return the prepared command","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"martinschnder"},"content":" private Command prepareAddToCartCommand(String args) {","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"martinschnder"},"content":" Pattern pattern \u003d Pattern.compile(\"/n (.*) /q (.*)\");","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"martinschnder"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"martinschnder"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 2) {","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"martinschnder"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"Barbaracwx"},"content":" long quantity \u003d Long.parseLong(matcher.group(2));","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"martinschnder"},"content":" return new AddToCartCommand(name, quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddToCartCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":142,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":143,"author":{"gitId":"Barbaracwx"},"content":" private Command prepareFindCommand(String args) {","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"Barbaracwx"},"content":" String[] findArgs \u003d args.split(\" \", 2);","lastModifiedDate":"2023-10-20"},{"lineNumber":145,"author":{"gitId":"Barbaracwx"},"content":" if (findArgs.length \u003d\u003d 2) {","lastModifiedDate":"2023-10-20"},{"lineNumber":146,"author":{"gitId":"Barbaracwx"},"content":" String criterion \u003d findArgs[0];","lastModifiedDate":"2023-10-20"},{"lineNumber":147,"author":{"gitId":"Barbaracwx"},"content":" String keyword \u003d findArgs[1];","lastModifiedDate":"2023-10-20"},{"lineNumber":148,"author":{"gitId":"Barbaracwx"},"content":" if (criterion.equals(\"/n\") || criterion.equals(\"/d\")) {","lastModifiedDate":"2023-10-20"},{"lineNumber":149,"author":{"gitId":"Barbaracwx"},"content":" return new FindCommand(keyword, criterion);","lastModifiedDate":"2023-10-20"},{"lineNumber":150,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":151,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-20"},{"lineNumber":152,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":153,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":154,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-20"},{"lineNumber":155,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":156,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":157,"author":{"gitId":"TeoHaoZhi"},"content":" private Command prepareAddVendorCommand (String args) throws IOException {","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"TeoHaoZhi"},"content":" String[] vendorArgs \u003d args.split(\" \",1);","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"TeoHaoZhi"},"content":" String vendorName \u003d vendorArgs[0];","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"TeoHaoZhi"},"content":" try {","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"TeoHaoZhi"},"content":" if (vendorName.equals(null) || vendorName.equals(\"\") || vendorName.equals(\" \")) {","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"TeoHaoZhi"},"content":" throw new IOException();","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":" } catch(Exception invalidInput){","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"TeoHaoZhi"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT,AddVendorCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"TeoHaoZhi"},"content":" return new AddVendorCommand(vendorName);","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":170,"author":{"gitId":"Barbaracwx"},"content":" private Command prepareSetThresholdCommand(String args) {","lastModifiedDate":"2023-10-29"},{"lineNumber":171,"author":{"gitId":"Barbaracwx"},"content":" try {","lastModifiedDate":"2023-10-29"},{"lineNumber":172,"author":{"gitId":"Barbaracwx"},"content":" Pattern pattern \u003d Pattern.compile(\"/n (.*) /tq (.*)\");","lastModifiedDate":"2023-10-29"},{"lineNumber":173,"author":{"gitId":"Barbaracwx"},"content":" Matcher matcher \u003d pattern.matcher(args);","lastModifiedDate":"2023-10-29"},{"lineNumber":174,"author":{"gitId":"Barbaracwx"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 2) {","lastModifiedDate":"2023-10-29"},{"lineNumber":175,"author":{"gitId":"Barbaracwx"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-29"},{"lineNumber":176,"author":{"gitId":"Barbaracwx"},"content":" Long threshold \u003d Long.parseLong(matcher.group(2));","lastModifiedDate":"2023-10-29"},{"lineNumber":177,"author":{"gitId":"Barbaracwx"},"content":" return new SetThresholdCommand(name, threshold);","lastModifiedDate":"2023-10-29"},{"lineNumber":178,"author":{"gitId":"Barbaracwx"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":179,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT,","lastModifiedDate":"2023-10-29"},{"lineNumber":180,"author":{"gitId":"Barbaracwx"},"content":" SetThresholdCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-29"},{"lineNumber":181,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":182,"author":{"gitId":"Barbaracwx"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-29"},{"lineNumber":183,"author":{"gitId":"Barbaracwx"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT,","lastModifiedDate":"2023-10-29"},{"lineNumber":184,"author":{"gitId":"Barbaracwx"},"content":" SetThresholdCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-29"},{"lineNumber":185,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":186,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":187,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":188,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"karishma-t":4,"martinschnder":85,"azfarulmatin":4,"TeoHaoZhi":39,"Barbaracwx":56}},{"path":"src/main/java/seedu/stocker/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.storage;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.exceptions.InvalidDrugFormatException;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" * Represents an object to handle writing to txt files and appending to them.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"public class Storage {","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" private Inventory inventory;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" public Storage(Inventory inventory) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" this.inventory \u003d inventory;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" * Writes to the first line of a txt file","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" * can be used to clear a txt file as well.","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" * @param filePath relative path of file to write to","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" * @param textToAdd what to write to the file","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if invalid input is entered","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" public void writeToFile(String filePath, String textToAdd) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" fw.close();","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" * Appends given text to next line of txt file.","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" * @param filePath relative path of file to write to","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"TeoHaoZhi"},"content":" * @param textToAppend what to write to the file","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if invalid input is given","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" public void appendToFile(String filePath, String textToAppend) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" BufferedWriter bf \u003d new BufferedWriter(new FileWriter(filePath,true));","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"TeoHaoZhi"},"content":" bf.write(textToAppend);","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"TeoHaoZhi"},"content":" bf.newLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"TeoHaoZhi"},"content":" bf.close();","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":53,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"TeoHaoZhi"},"content":" * Loads drugs from txt file into inventory system.","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":" * @param filePath Relative path to file containing list of drugs to be loaded.","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"TeoHaoZhi"},"content":" * @throws IOException if file is not found","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" public void loadFileContents(String filePath) throws IOException, InvalidDrugFormatException {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" File holder \u003d new File(\"./drugs.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":" if (!holder.exists()) {","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" holder.createNewFile();","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":" Scanner reader \u003d new Scanner(f);","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"martinschnder"},"content":" Pattern pattern \u003d Pattern.compile(\"Name: (.*), Expiry date: (.*), Quantity: (.*)\");","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" while(reader.hasNextLine()){","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" Matcher matcher \u003d pattern.matcher(reader.nextLine());","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" if (matcher.matches() \u0026\u0026 matcher.groupCount() \u003d\u003d 3) {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"martinschnder"},"content":" String name \u003d matcher.group(1);","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":" String expiryDate \u003d matcher.group(2);","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"martinschnder"},"content":" Long quantity \u003d Long.parseLong(matcher.group(3));","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"martinschnder"},"content":" Drug drug \u003d new Drug(name, expiryDate);","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"martinschnder"},"content":" inventory.addNewDrug(name, drug, quantity);","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"martinschnder"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"martinschnder"},"content":" throw new InvalidDrugFormatException(\"\");","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":85,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"martinschnder":26,"TeoHaoZhi":59}},{"path":"src/main/java/seedu/stocker/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.commands.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_USERNAME_INPUT;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_USER_ALREADY_EXIST;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_LOGIN_WELCOME;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_SUCCESSFUL_LOGIN;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_NO_BLANK_NAME_ALLOWED;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_NO_BLANK_PASSWORD_ALLOWED;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_PASSWORD_INPUT;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_WELCOME;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_CHOICE;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_GOODBYE;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_USERNAME_OR_PASSWORD;","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"import static seedu.stocker.common.Messages.MESSAGE_SUCCESSFUL_REGISTRATION;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INIT_FAILED;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":"public class Ui {","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" * Offset required to convert between 1-indexing and 0-indexing.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" public static final int DISPLAYED_INDEX_OFFSET \u003d 1;","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" * A decorative prefix added to the beginning of lines printed by Jerry","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"martinschnder"},"content":" private static final String LINE_PREFIX \u003d \"|| \";","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"martinschnder"},"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-09"},{"lineNumber":40,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"TeoHaoZhi"},"content":" * A platform independent line separator.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"martinschnder"},"content":" private static final String LS \u003d System.lineSeparator();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" * Format of indexed list item","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" private static final String MESSAGE_INDEXED_LIST_ITEM \u003d \"\\t%1$d. %2$s\";","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"TeoHaoZhi"},"content":" public Ui() {","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"martinschnder"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" this.out \u003d out;","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"martinschnder"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"martinschnder"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"martinschnder"},"content":" * Echos the command back to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"martinschnder"},"content":" * @return command (full line) entered by the user","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"martinschnder"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"martinschnder"},"content":" out.print(LINE_PREFIX + \"Enter command: \");","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":" String fullUserInput \u003d in.nextLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":" return fullUserInput;","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":" * Shows message(s) to the user","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"martinschnder"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"martinschnder"},"content":" for (String m : message) {","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"martinschnder"},"content":" out.println(LINE_PREFIX + m.replace(\"\\n\", LS + LINE_PREFIX));","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" public void showLoginMessage() {","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(DIVIDER, MESSAGE_LOGIN_WELCOME, DIVIDER);","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":" public void showUsernameMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_USERNAME_INPUT);","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":" public void showPasswordMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_PASSWORD_INPUT);","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":" public void showSuccessfulRegistrationMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_SUCCESSFUL_REGISTRATION);","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"TeoHaoZhi"},"content":" public void showSuccessfulLoginMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":103,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_SUCCESSFUL_LOGIN);","lastModifiedDate":"2023-10-14"},{"lineNumber":104,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"TeoHaoZhi"},"content":" public void showInvalidChoiceMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_INVALID_CHOICE);","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"TeoHaoZhi"},"content":" public void showUserAlreadyExistMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_USER_ALREADY_EXIST);","lastModifiedDate":"2023-10-14"},{"lineNumber":112,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":113,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":114,"author":{"gitId":"TeoHaoZhi"},"content":" public void showEnterChoiceAgainMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":115,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_LOGIN_WELCOME);","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"TeoHaoZhi"},"content":" public void showInvalidUsernameOrPasswordMessage() {","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_INVALID_USERNAME_OR_PASSWORD);","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":121,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":122,"author":{"gitId":"TeoHaoZhi"},"content":" public void showBlankNameMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_NO_BLANK_NAME_ALLOWED);","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"TeoHaoZhi"},"content":" public void showBlankPasswordMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"TeoHaoZhi"},"content":" showToUser(MESSAGE_NO_BLANK_PASSWORD_ALLOWED);","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"martinschnder"},"content":" public void showWelcomeMessage() {","lastModifiedDate":"2023-10-09"},{"lineNumber":131,"author":{"gitId":"martinschnder"},"content":" showToUser(MESSAGE_WELCOME, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-09"},{"lineNumber":132,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":133,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":134,"author":{"gitId":"martinschnder"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-10-09"},{"lineNumber":135,"author":{"gitId":"martinschnder"},"content":" showToUser(MESSAGE_GOODBYE, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-09"},{"lineNumber":136,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":137,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":138,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":139,"author":{"gitId":"martinschnder"},"content":" * Shows the result of a command execution to the user. Includes additional formatting to demarcate different","lastModifiedDate":"2023-10-09"},{"lineNumber":140,"author":{"gitId":"martinschnder"},"content":" * command execution segments.","lastModifiedDate":"2023-10-09"},{"lineNumber":141,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":142,"author":{"gitId":"martinschnder"},"content":" public \u003cT\u003evoid showResultToUser(CommandResult\u003cT\u003e result) {","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"martinschnder"},"content":" final Optional\u003cList\u003cT\u003e\u003e resultElements \u003d result.getRelevantElements();","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"martinschnder"},"content":" if (resultElements.isPresent()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"martinschnder"},"content":" showElementsListView(resultElements.get());","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":147,"author":{"gitId":"martinschnder"},"content":" showToUser(result.feedbackToUser, DIVIDER);","lastModifiedDate":"2023-10-09"},{"lineNumber":148,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":149,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":150,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":151,"author":{"gitId":"TeoHaoZhi"},"content":" * Shows a list of strings to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-14"},{"lineNumber":152,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":153,"author":{"gitId":"martinschnder"},"content":" private void showToUserAsIndexedList(List\u003cString\u003e list) {","lastModifiedDate":"2023-10-09"},{"lineNumber":154,"author":{"gitId":"martinschnder"},"content":" showToUser(getIndexedListForViewing(list));","lastModifiedDate":"2023-10-09"},{"lineNumber":155,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":156,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":157,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":158,"author":{"gitId":"martinschnder"},"content":" * Shows a list of drugs to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-09"},{"lineNumber":159,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":160,"author":{"gitId":"martinschnder"},"content":" private \u003cT\u003evoid showElementsListView(List\u003cT\u003e elements) {","lastModifiedDate":"2023-10-23"},{"lineNumber":161,"author":{"gitId":"martinschnder"},"content":" final List\u003cString\u003e formattedElements \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":162,"author":{"gitId":"martinschnder"},"content":" for (int i \u003d 0; i \u003c elements.size(); i++) {","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"martinschnder"},"content":" formattedElements.add(elements.get(i).toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":165,"author":{"gitId":"martinschnder"},"content":" showToUserAsIndexedList(formattedElements);","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":167,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":168,"author":{"gitId":"martinschnder"},"content":" public void showInitFailedMessage() {","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"martinschnder"},"content":" showToUser(MESSAGE_INIT_FAILED, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":173,"author":{"gitId":"TeoHaoZhi"},"content":" * Formats a list of strings as a viewable indexed list.","lastModifiedDate":"2023-10-14"},{"lineNumber":174,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":175,"author":{"gitId":"martinschnder"},"content":" public static String getIndexedListForViewing(List\u003cString\u003e listItems) {","lastModifiedDate":"2023-10-10"},{"lineNumber":176,"author":{"gitId":"martinschnder"},"content":" final StringBuilder formatted \u003d new StringBuilder();","lastModifiedDate":"2023-10-09"},{"lineNumber":177,"author":{"gitId":"martinschnder"},"content":" int displayIndex \u003d DISPLAYED_INDEX_OFFSET;","lastModifiedDate":"2023-10-09"},{"lineNumber":178,"author":{"gitId":"martinschnder"},"content":" for (String listItem : listItems) {","lastModifiedDate":"2023-10-09"},{"lineNumber":179,"author":{"gitId":"martinschnder"},"content":" formatted.append(getIndexedListItem(displayIndex, listItem)).append(LS);","lastModifiedDate":"2023-10-11"},{"lineNumber":180,"author":{"gitId":"martinschnder"},"content":" displayIndex++;","lastModifiedDate":"2023-10-09"},{"lineNumber":181,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":182,"author":{"gitId":"martinschnder"},"content":" return formatted.toString();","lastModifiedDate":"2023-10-09"},{"lineNumber":183,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":184,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":185,"author":{"gitId":"martinschnder"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":186,"author":{"gitId":"martinschnder"},"content":" * Formats a string as a viewable indexed list item.","lastModifiedDate":"2023-10-09"},{"lineNumber":187,"author":{"gitId":"martinschnder"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":188,"author":{"gitId":"martinschnder"},"content":" * @param visibleIndex visible index for this listing","lastModifiedDate":"2023-10-09"},{"lineNumber":189,"author":{"gitId":"martinschnder"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":190,"author":{"gitId":"martinschnder"},"content":" private static String getIndexedListItem(int visibleIndex, String listItem) {","lastModifiedDate":"2023-10-09"},{"lineNumber":191,"author":{"gitId":"martinschnder"},"content":" return String.format(MESSAGE_INDEXED_LIST_ITEM, visibleIndex, listItem);","lastModifiedDate":"2023-10-09"},{"lineNumber":192,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":193,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":194,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"martinschnder":97,"TeoHaoZhi":97}},{"path":"src/main/java/seedu/stocker/vendors/Vendor.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.vendors;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"public class Vendor {","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":" public String name;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":" public Vendor(String name) {","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" * Gets the name of the vendor.","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" * @return The name of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" public String getName() {","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" return name;","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" * Sets the name of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" * @param name The new name to set for the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" * Returns a string representation of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" * @return A string containing the name of the vendor.","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"TeoHaoZhi"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"TeoHaoZhi"},"content":" public String toString() {","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"TeoHaoZhi"},"content":" return \"Name: \" + name;","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":38}},{"path":"src/main/java/seedu/stocker/vendors/VendorsList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.vendors;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"public class VendorsList {","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" public static ArrayList\u003cVendor\u003e vendorArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":" public VendorsList(){","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" vendorArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" * Adds new vendor to vendor list","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" * @param vendor","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" public static void addNewVendor(Vendor vendor){","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" vendorArrayList.add(vendor);","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" * Gets details of all vendors","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" * @return","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" public static List\u003cVendor\u003e getVendorEntries() {","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" return vendorArrayList.stream()","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" .collect(Collectors.toCollection(ArrayList::new));","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"TeoHaoZhi":32}},{"path":"src/test/java/seedu/stocker/StockerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker;","lastModifiedDate":"2023-10-08"},{"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":"TeoHaoZhi"},"content":"class StockerTest {","lastModifiedDate":"2023-10-08"},{"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":{"TeoHaoZhi":2,"-":10}},{"path":"src/test/java/seedu/stocker/commands/AddCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":"class AddCommandTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" AddCommand command \u003d new AddCommand(\"Paracetamol\", \"12/05/2024\", 12L); ","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" command.setData(new Inventory(), new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" String expectedOutput \u003d \"New drug added in the inventory: Paracetamol\";","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" assertEquals(command.execute().feedbackToUser, new CommandResult(expectedOutput).feedbackToUser);","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" assertEquals(command.execute().getRelevantElements(), new CommandResult(expectedOutput).getRelevantElements());","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"martinschnder":21}},{"path":"src/test/java/seedu/stocker/commands/AddToCartCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"martinschnder"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"martinschnder"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"class AddToCartCommandTest {","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"martinschnder"},"content":" ","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"martinschnder"},"content":" @Test","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" AddCommand command \u003d new AddCommand(\"Paracetamol\", \"12/05/2024\", 12L); ","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" Cart cart \u003d new Cart();","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" assertEquals(0, cart.getCurrentCart().size());","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" SalesList salesList \u003d new SalesList();","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" command.setData(inventory, salesList, cart);","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" command.execute();","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"martinschnder"},"content":" AddToCartCommand command2 \u003d new AddToCartCommand(\"paracetamol\", 2L);","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" command2.setData(inventory, salesList, cart);","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"martinschnder"},"content":" command2.execute();","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"martinschnder"},"content":" assertEquals(command2.execute().feedbackToUser, \"New drug added in the current cart: Paracetamol\");","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"martinschnder"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"martinschnder":27}},{"path":"src/test/java/seedu/stocker/commands/DeleteCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"karishma-t"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"karishma-t"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"karishma-t"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"karishma-t"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"karishma-t"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"karishma-t"},"content":"class DeleteCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"karishma-t"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"karishma-t"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"karishma-t"},"content":" // Create an inventory and add a drug to it","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"karishma-t"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"martinschnder"},"content":" Drug doliprane \u003d new Drug(\"Doliprane\", \"12/06/2035\");","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" inventory.addNewDrug(\"doliprane\", doliprane, 52L);","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"karishma-t"},"content":" // Create a DeleteCommand for the drug","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"karishma-t"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(\"Doliprane\");","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"martinschnder"},"content":" deleteCommand.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"karishma-t"},"content":" // Test the execution of the DeleteCommand","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"martinschnder"},"content":" String expectedOutput \u003d \"Drug removed from inventory: Doliprane\";","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"karishma-t"},"content":" assertEquals(deleteCommand.execute().feedbackToUser, expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"karishma-t"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"karishma-t"},"content":" // Ensure that the drug is no longer in the inventory","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"martinschnder"},"content":" assertEquals(0, inventory.getStockEntries().size());","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"karishma-t"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"karishma-t"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"karishma-t":25,"martinschnder":7}},{"path":"src/test/java/seedu/stocker/commands/FindCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":"import static seedu.stocker.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" * JUnit test class for the FindCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":"class FindCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":" * Tests the execution of the FindCommand with a keyword for drug names.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" public void executeTestByName() {","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":" // Create an instance of FindCommand with a keyword","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":" FindCommand command \u003d new FindCommand(\"Pa\", \"/n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" Drug drug2 \u003d new Drug(\"Panadol\", \"04/07/2030\");","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"Panadol\", drug2, 20L);","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":" // Set the modified inventory for the command","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"martinschnder"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" // Define expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d \"1. Name: Panadol, Expiry date: 04/07/2030, Quantity: 20\" + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" \"Listed all drugs with the keyword in the inventory.\";","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" CommandResult actualResult \u003d command.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" // Test the command\u0027s execute method with the modified inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, actualResult.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"Barbaracwx"},"content":" * Tests the execution of the FindCommand with a keyword for drug expiry dates.","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"Barbaracwx"},"content":" public void executeTestByExpiryDate() {","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"Barbaracwx"},"content":" // Create an instance of FindCommand with a keyword for expiry date","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"Barbaracwx"},"content":" FindCommand command \u003d new FindCommand(\"01/03/2027\", \"/d\");","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"Barbaracwx"},"content":" Drug drug1 \u003d new Drug(\"Paracetamol\", \"01/03/2027\");","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"Paracetamol\", drug1, 12L);","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"Barbaracwx"},"content":" // Set the modified inventory for the command","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"Barbaracwx"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"Barbaracwx"},"content":" // Define expected output for drugs with matching expiry date","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d \"1. Name: Paracetamol, Expiry date: 01/03/2027, Quantity: 12\" + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"Barbaracwx"},"content":" \"Listed all drugs with the keyword in the inventory.\";","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"Barbaracwx"},"content":" CommandResult actualResult \u003d command.execute();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"Barbaracwx"},"content":" // Test the command\u0027s execute method with the modified inventory","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, actualResult.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"Barbaracwx"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"Barbaracwx"},"content":" * Tests the execution of the FindCommand with a null keyword, expecting an invalid format message.","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"Barbaracwx"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"Barbaracwx"},"content":" public void executeTestWithNullKeyword() {","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"Barbaracwx"},"content":" // Create an instance of FindCommand with a null keyword","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"Barbaracwx"},"content":" FindCommand command \u003d new FindCommand(\"\", \"/n\");","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"Barbaracwx"},"content":" // Set the modified inventory for the command","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"Barbaracwx"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"Barbaracwx"},"content":" // Define expected output for invalid format","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, FindCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"Barbaracwx"},"content":" CommandResult actualResult \u003d command.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"Barbaracwx"},"content":" // Test the command\u0027s execute method with a null keyword","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, actualResult.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"martinschnder":3,"Barbaracwx":91}},{"path":"src/test/java/seedu/stocker/commands/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"TeoHaoZhi"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"TeoHaoZhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"class HelpCommandTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":" HelpCommand command \u003d new HelpCommand();","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":" String expectedOutput \u003d System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TeoHaoZhi"},"content":" + \"add: Adds a new drug to the drug list. Parameters: NAME, EXPIRY DATE, QUANTITY, \"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: add /n Doliprane /d 12/06/2035 /q 52\"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":" + \"delete: Removes a drug from drug list. Parameters: Name \"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: delete \u003cDrug Name\u003e\"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TeoHaoZhi"},"content":" + \"help: Shows program usage instructions. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: help\"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TeoHaoZhi"},"content":" + \"list: List all drug information that is being tracked by the system. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: list\"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":" + \"stocklevel: List all drugs by quantity level tracked by the system in ascending order. \"","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: stocklevel\"","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"TeoHaoZhi"},"content":" + \"find /n: Finds drug in inventory using name.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: find /n panadol\"","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"TeoHaoZhi"},"content":" + \"find /d: Finds drug in inventory using date.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Barbaracwx"},"content":" + \"Example: find /d panadol\"","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"martinschnder"},"content":" + \"addtocart: Adds a new drug to the current cart. Parameters: NAME, QUANTITY,\"","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"martinschnder"},"content":" + \"Example: addtocart /n Doliprane /q 2\"","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"martinschnder"},"content":" + \"checkout: Checks out current cart. Parameters:\"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"martinschnder"},"content":" + \"Example: checkout\"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"martinschnder"},"content":" + \"viewcart: View the current cart items.\"","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"martinschnder"},"content":" + \"Example: viewcart\"","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"martinschnder"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"TeoHaoZhi"},"content":" + \"login: Login new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: login\"","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"TeoHaoZhi"},"content":" + \"register: Register new user into system.\"","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: register\"","lastModifiedDate":"2023-10-20"},{"lineNumber":71,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":72,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-20"},{"lineNumber":73,"author":{"gitId":"TeoHaoZhi"},"content":" + \"save: Saves existing druglist that is loaded into inventory when system is booted up.\"","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: save\"","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"TeoHaoZhi"},"content":" + \"addVendor: Adds a new vendor to the vendors list. Parameter: NAME\"","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: addVendor Moderna\"","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"TeoHaoZhi"},"content":" + \"listVendors: List all vendor information that is being tracked by the system.\"","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: listVendors\"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"TeoHaoZhi"},"content":" + \"bye: Exits the program.\"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TeoHaoZhi"},"content":" + System.getProperty(\"line.separator\")","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TeoHaoZhi"},"content":" + \"Example: bye\";","lastModifiedDate":"2023-10-11"},{"lineNumber":94,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":95,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"TeoHaoZhi"},"content":" assertEquals(new CommandResult(expectedOutput).feedbackToUser, command.execute().feedbackToUser);","lastModifiedDate":"2023-10-11"},{"lineNumber":97,"author":{"gitId":"TeoHaoZhi"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":98,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"martinschnder":15,"TeoHaoZhi":73,"Barbaracwx":10}},{"path":"src/test/java/seedu/stocker/commands/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"azfarulmatin"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"azfarulmatin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"azfarulmatin"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"azfarulmatin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"azfarulmatin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"//test for list","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"azfarulmatin"},"content":"class ListCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"azfarulmatin"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"azfarulmatin"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"azfarulmatin"},"content":" ListCommand command \u003d new ListCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" command.setData(new Inventory(), new SalesList(), new Cart());","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"azfarulmatin"},"content":" String expectedOutput \u003d \"The inventory is empty.\";","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"azfarulmatin"},"content":" assertEquals( new CommandResult(expectedOutput).feedbackToUser,command.execute().feedbackToUser);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"azfarulmatin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"azfarulmatin"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"martinschnder":3,"azfarulmatin":15,"Barbaracwx":1}},{"path":"src/test/java/seedu/stocker/commands/StockLevelCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Barbaracwx"},"content":"package seedu.stocker.commands;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"Barbaracwx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Drug;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Inventory;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.SalesList;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"Barbaracwx"},"content":"import seedu.stocker.drugs.Cart;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"Barbaracwx"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"Barbaracwx"},"content":"//test for list","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"Barbaracwx"},"content":"class StockLevelCommandTest {","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"Barbaracwx"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"Barbaracwx"},"content":" public void executeTest() {","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"Barbaracwx"},"content":" // Create a new inventory","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"Barbaracwx"},"content":" Inventory inventory \u003d new Inventory();","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"Barbaracwx"},"content":" Drug drug1 \u003d new Drug(\"Panadol\", \"04/07/2030\");","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"Panadol\", drug1, 120);","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"Barbaracwx"},"content":" Drug drug2 \u003d new Drug(\"paracetamol\", \"01/07/2020\");","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"paracetamol\", drug2, 50);","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"Barbaracwx"},"content":" Drug drug3 \u003d new Drug(\"histamine\", \"09/05/2070\");","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"Barbaracwx"},"content":" inventory.addNewDrug(\"histamine\", drug3, 10);","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"Barbaracwx"},"content":" ShowStockLevelCommand command \u003d new ShowStockLevelCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"Barbaracwx"},"content":" command.setData(inventory, new SalesList(), new Cart());","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"Barbaracwx"},"content":" // Execute the command","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"Barbaracwx"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"Barbaracwx"},"content":" String expectedOutput \u003d \"1. Name: histamine, Expiry date: 09/05/2070, Quantity: 10\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"Barbaracwx"},"content":" \"2. Name: paracetamol, Expiry date: 01/07/2020, Quantity: 50\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"Barbaracwx"},"content":" \"3. Name: Panadol, Expiry date: 04/07/2030, Quantity: 120\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"Barbaracwx"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"Barbaracwx"},"content":" \"Stock Level Report (Sorted by Quantity)\";","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"Barbaracwx"},"content":" assertEquals(expectedOutput, result.getFeedbackToUserFindTest());","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"Barbaracwx"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"Barbaracwx"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"Barbaracwx"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"Barbaracwx":44}},{"path":"src/test/java/seedu/stocker/ui/UiTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"martinschnder"},"content":"package seedu.stocker.ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"TeoHaoZhi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"martinschnder"},"content":"import java.util.List;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"martinschnder"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"TeoHaoZhi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"TeoHaoZhi"},"content":"class UiTest {","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"martinschnder"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"martinschnder"},"content":" public void getIndexedListForViewing_success() {","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"martinschnder"},"content":" String expectedOutput \u003d \"\\t1. Paracetamol\" + System.lineSeparator()","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"martinschnder"},"content":" + \"\\t2. Ibuprofene\" + System.lineSeparator()","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"martinschnder"},"content":" + \"\\t3. Doliprane\" + System.lineSeparator();","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"TeoHaoZhi"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"martinschnder"},"content":" List\u003cString\u003e input \u003d Arrays.asList(\"Paracetamol\", \"Ibuprofene\", \"Doliprane\");","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"martinschnder"},"content":" assertEquals(expectedOutput, new Ui().getIndexedListForViewing(input));","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"martinschnder"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"TeoHaoZhi"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"martinschnder":11,"TeoHaoZhi":11}},{"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":"TeoHaoZhi"},"content":"FC ACTUAL.TXT ACTUAL.TXT \u003eNUL \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"TeoHaoZhi":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":"-"},"content":"diff EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"TeoHaoZhi"},"content":"if [ ACTUAL.TXT \u003d\u003d ACTUAL.TXT ]","lastModifiedDate":"2023-10-14"},{"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":{"TeoHaoZhi":1,"-":22}}] diff --git a/AY2324S1-CS2113-T17-3_tp_master/commits.json b/AY2324S1-CS2113-T17-3_tp_master/commits.json index 6755e49..b6e3ebb 100644 --- a/AY2324S1-CS2113-T17-3_tp_master/commits.json +++ b/AY2324S1-CS2113-T17-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"karishma-t":[{"date":"2023-10-05","commitResults":[{"hash":"9b179211347fe7a0942693aea92a880a72243999","isMergeCommit":false,"messageTitle":"Add files for Karishma about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":4}}},{"hash":"ec15853438ef4adb88f2bbcc87f367804d35788d","isMergeCommit":false,"messageTitle":"Conflict resolution","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"5c174ca4cdfe79c6b173c68db27721f92aa0f615","isMergeCommit":false,"messageTitle":"Add delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":13}}},{"hash":"4c7d28ae3f51a16116cf790aabeb170d9ffaad80","isMergeCommit":false,"messageTitle":"Add junit test for Delete command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":0}}},{"hash":"ed041352034696e09d01385f720d3f3a72037c62","isMergeCommit":false,"messageTitle":"Modify to pass checkstyle tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3},"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-26","commitResults":[{"hash":"521a48339b7e42ceb652e3e1d147a6c5b485792b","isMergeCommit":false,"messageTitle":"Modify DG for delete","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":53,"deletions":0}}}]}],"martinschnder":[{"date":"2023-10-07","commitResults":[{"hash":"d13e4519f0e878a3e9be46a05a57ee90c57539c8","isMergeCommit":false,"messageTitle":"Add martin portofolio and picture and update about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":1}}},{"hash":"2dbd0893fe8f3dac09ed84bb33c414c0e90c74e2","isMergeCommit":true,"messageTitle":"Merge pull request #12 from martinschnder/martin-AboutUs","messageBody":"Add martin portofolio and picture and update about us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"eca592d2600d2253010eebbf55c4217a971ca79b","isMergeCommit":false,"messageTitle":"Updated build.gradle to match new main class name","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"f9bf0f4dcbf0dc02f210e21283f8f18ddf745d2a","isMergeCommit":false,"messageTitle":"Reorganize files in various packages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":9},"other":{"insertions":2,"deletions":2}}},{"hash":"dd4cb2baf5df643afbefe71a963a78e7489a79b2","isMergeCommit":false,"messageTitle":"Create abstract command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}},{"hash":"0a4ae29a7ca56b747974f29fc720e496c0cebaa3","isMergeCommit":false,"messageTitle":"Add the addclass and rename the druglist class to inventory","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":101,"deletions":19}}},{"hash":"9891fe1ce7e876b766da0e19a647588a3845d02d","isMergeCommit":false,"messageTitle":"Delete old file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":14}}},{"hash":"c76880c8d3ba9f7555f17105e6689822950877aa","isMergeCommit":false,"messageTitle":"Implement ExitCommand and AddCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":316,"deletions":18}}}]},{"date":"2023-10-10","commitResults":[{"hash":"dce79f9038b5eade80126270475b9775283d2fd2","isMergeCommit":false,"messageTitle":"Add ui and addcommand testing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":29,"deletions":1}}}]},{"date":"2023-10-11","commitResults":[{"hash":"8910d7979fdebe5386871de9ea2cda42c5161370","isMergeCommit":false,"messageTitle":"Change the line separator character","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"d0a83e9fe5ed5a7cc13594979f0803fa8e9a2374","isMergeCommit":false,"messageTitle":"Change the line separator character in the UI class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"55d760266b318ad23fbab35a6d1857c73c063d17","isMergeCommit":true,"messageTitle":"Merge pull request #34 from martinschnder/addDrug-unit-tests","messageBody":"Add ui and addcommand testing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"7646870a909320f59cefb562285e62abc23ef833","isMergeCommit":false,"messageTitle":"Modify inventory structure and add all the command needed to make a sale (addtocart, viewcart, checkout)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":402,"deletions":131},"test-code":{"insertions":23,"deletions":15}}},{"hash":"1134e5d481615a014073af9031ca71061ff42878","isMergeCommit":false,"messageTitle":"Fix load function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":15}}},{"hash":"4e4ef4698675691973d77ae7481e1ee117537acf","isMergeCommit":false,"messageTitle":"Add better exception handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":18}}},{"hash":"a075bd1720fd4eac5e8c090a897225d5d2057e6d","isMergeCommit":false,"messageTitle":"Update helpcommand with new commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":4},"test-code":{"insertions":43,"deletions":28}}}]},{"date":"2023-10-24","commitResults":[{"hash":"0a64a48a68acc1accbbfec26dd81f3df9574df9c","isMergeCommit":false,"messageTitle":"Add tests for AddToCart command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":27,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"b4d2647664ddb9696b52554ddbe328b730297a98","isMergeCommit":false,"messageTitle":"Add main data structures in developerGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":46,"deletions":21}}},{"hash":"18929947f4248686faad3b70fbff3687c9c19c3b","isMergeCommit":true,"messageTitle":"Merge pull request #84 from martinschnder/developerGuide","messageBody":"Add main data structures in developerGuide","fileTypesAndContributionMap":{}}]}],"azfarulmatin":[{"date":"2023-10-07","commitResults":[{"hash":"6c8ee942babd12a205caa1b7e098fcb6340f76a9","isMergeCommit":false,"messageTitle":"Update Azfarul About us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"05e7ef8ec96488ea4719dfc0372532fe8e5694de","isMergeCommit":true,"messageTitle":"Merge pull request #19 from azfarulmatin/master","messageBody":"Update Azfarul About us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"d5afb6bfea43555f6f259a086b672acaefd20e59","isMergeCommit":false,"messageTitle":"Add List function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":110,"deletions":29}}},{"hash":"57a05c0bd5b98cc8b3bafc5eb9a158684e7aa058","isMergeCommit":true,"messageTitle":"Merge pull request #44 from azfarulmatin/AzfarulMatin-ListCommand","messageBody":"Add List function","fileTypesAndContributionMap":{}},{"hash":"4a24ed0a7c4ba4280e8279f225d94eca57adc5eb","isMergeCommit":false,"messageTitle":"Fix checkstyle and junit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":15}}},{"hash":"a1860305e34b8c74ade793866b25205f953c8319","isMergeCommit":true,"messageTitle":"Merge pull request #45 from azfarulmatin/AzfarulMatin-ListCommand","messageBody":"Fix checkstyle and junit test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"1dda9d2754e2a02578da9238442c6d10f7e66d6f","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":16,"deletions":0}}},{"hash":"440fa5dc27d5fd869d27429012fdbe5aeeae7619","isMergeCommit":true,"messageTitle":"Merge pull request #46 from azfarulmatin/AzfarulMatin-JUnitTestListCommand","messageBody":"Add JUnit Test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"3887203ffba5c298294ab19aea34a4d3ed459f58","isMergeCommit":false,"messageTitle":"Add assertions for ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"09522dd36305e098a7b90627e22eb45576b25579","isMergeCommit":true,"messageTitle":"Merge pull request #65 from azfarulmatin/master","messageBody":"Add assertions for ListCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"48b64546002893200c17724ba054f54c1593848a","isMergeCommit":false,"messageTitle":"Update ListCommand in Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":0}}},{"hash":"c9f60b4f7e954b7f51ac2623133f116e513fd8d7","isMergeCommit":true,"messageTitle":"Merge pull request #87 from azfarulmatin/AzfarulMatin-DeveloperGuide","messageBody":"Update ListCommand in Developer Guide","fileTypesAndContributionMap":{}}]}],"TeoHaoZhi":[{"date":"2023-10-05","commitResults":[{"hash":"f2bef309abc1a31812e5cb92d52cc3edc1ea44c6","isMergeCommit":false,"messageTitle":"Update UserGuide.md to add theme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}},{"hash":"80b42e7c9d1a437ae8bed5f38e44c218f440f47c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Barbaracwx/Barbaracwx-AboutUs","messageBody":"Added Barbara.md","fileTypesAndContributionMap":{}},{"hash":"aa9ba0c6a59865a89b52a6f53b7df1df57bb99de","isMergeCommit":false,"messageTitle":"Add files for Hao Zhi\u0027s about us page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"78381da48ea0ab8048ffca83fc47af7dd59e458b","isMergeCommit":true,"messageTitle":"Merge branch \u0027HaoZhi-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0c3018bd7af6a34e46ede0867b55d0a498285ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5034d288227d95c1a28ecc2359f1ea357dd3b437","isMergeCommit":true,"messageTitle":"Merge pull request #3 from TeoHaoZhi/master","messageBody":"Add HaoZhi\u0027s about us files","fileTypesAndContributionMap":{}},{"hash":"88803a7aec4b841305b2a7716850e466193ec107","isMergeCommit":false,"messageTitle":"Clean up UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-06","commitResults":[{"hash":"220ea22f86c3d933219eefa1ae6e0c2fabea1d44","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into karishma-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"800151596e695fdfd13c417def35fd80dc78fed4","isMergeCommit":true,"messageTitle":"Merge pull request #10 from karishma-t/karishma-AboutUs","messageBody":"Add Karishma about us","fileTypesAndContributionMap":{}},{"hash":"4a53af6054886017e9cf732a597960c970f202d4","isMergeCommit":false,"messageTitle":"Fix about us portfolio bug","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"eb792a86d1eb0fd6ea4e2bca18a1ed4e10c07661","isMergeCommit":true,"messageTitle":"Merge pull request #11 from TeoHaoZhi/master","messageBody":"Fix about us portfolio bug","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"090f7fd2112203bcd0f818c6a79ab83c1945118e","isMergeCommit":false,"messageTitle":"Rename classes","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":4,"deletions":4}}},{"hash":"cd37b8a6e9414c1fa24b68559ff23066fde03931","isMergeCommit":true,"messageTitle":"Merge pull request #23 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Rename classes","fileTypesAndContributionMap":{}},{"hash":"293aa145c39d8d91f975a08e7f0c8f491234cd7e","isMergeCommit":false,"messageTitle":"Add dummy classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":0}}},{"hash":"3d5504d42b2532eadb56b49ff210b09cdd50284c","isMergeCommit":true,"messageTitle":"Merge pull request #24 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add dummy classes","fileTypesAndContributionMap":{}},{"hash":"d842866453c774e4e7cb523fc0f6d99109564fbb","isMergeCommit":false,"messageTitle":"Add attributes to drug class","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1},"test-code":{"insertions":46,"deletions":20}}},{"hash":"7988e7aab82f83af8ed057426371bc9f8066e5c2","isMergeCommit":true,"messageTitle":"Merge pull request #25 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add attributes to drug class","fileTypesAndContributionMap":{}},{"hash":"1746b905d7c8f9941ce95abe0c601ed7a555d341","isMergeCommit":false,"messageTitle":"Add help feature to UI class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":1}}},{"hash":"227af0572b033254d6546284a0ee2f875a71c3a9","isMergeCommit":true,"messageTitle":"Merge pull request #26 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add help feature to UI class","fileTypesAndContributionMap":{}},{"hash":"7299b86db5d860ab190c91abd4c6962273b196cd","isMergeCommit":false,"messageTitle":"Add exit point for programme","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":58,"deletions":11},"other":{"insertions":0,"deletions":0},"test-code":{"insertions":0,"deletions":49}}},{"hash":"de4799c7421e4b4195b2576cd2425462d6a6fa0e","isMergeCommit":true,"messageTitle":"Merge pull request #27 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add exit point for programme","fileTypesAndContributionMap":{}},{"hash":"354c79d2f7cbb08fb7700ca95ef4ca362f2c172d","isMergeCommit":false,"messageTitle":"Refactor printing for help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":24}}},{"hash":"8ab6c94c4d553c98bdc4616b2841d95fea09e2e7","isMergeCommit":true,"messageTitle":"Merge pull request #28 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Refactor printing for help command","fileTypesAndContributionMap":{}},{"hash":"5bf20560cb92c584383123cf1ba209e1943da17b","isMergeCommit":false,"messageTitle":"Add Junit test for help feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":5},"test-code":{"insertions":47,"deletions":0}}},{"hash":"0cce6790d3939b1aa5f6309f8c81e87f8490dceb","isMergeCommit":true,"messageTitle":"Merge pull request #29 from TeoHaoZhi/HaoZhi-JUnitTestForHelpFeature","messageBody":"Add Junit test for help feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"44f897c607a7bf71459ce63ef7a22368d8374d2c","isMergeCommit":true,"messageTitle":"Merge pull request #30 from martinschnder/branch-AddCommand","messageBody":"Branch add command","fileTypesAndContributionMap":{}},{"hash":"38f4573bdbf922271274ff418303a83c5ba9778e","isMergeCommit":false,"messageTitle":"Add more class templates","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":22}}},{"hash":"7ab218bb640ddf7a60822ecd133989bcd0d2a220","isMergeCommit":true,"messageTitle":"Merge pull request #31 from TeoHaoZhi/HaoZhi-ListCommandHelp","messageBody":"Add more class templates","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"e366c56327163c3ebdcc63a2889b90ea43218e50","isMergeCommit":false,"messageTitle":"Update userguide markdown file","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":154,"deletions":12}}},{"hash":"67f9f7118ed7fe8c06884e7757e87e6c634fa6d8","isMergeCommit":true,"messageTitle":"Merge pull request #32 from TeoHaoZhi/HaoZhi-UserGuideUpdateV1.0","messageBody":"Update userguide markdown file","fileTypesAndContributionMap":{}},{"hash":"b6fd34963d346c40de9d71cb9ea43699a14d4b8d","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":2}}},{"hash":"a3f768d82e7036ec93e0543e7c2db1847279aa1c","isMergeCommit":true,"messageTitle":"Merge pull request #33 from TeoHaoZhi/HaoZhi-ReadMe","messageBody":"Update README","fileTypesAndContributionMap":{}},{"hash":"dc4311ad9d1840486a71ba7958140542108c093a","isMergeCommit":false,"messageTitle":"Add Junit test for help command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":29,"deletions":0}}},{"hash":"324c68f05643be382892df3fec2ec0d7ea16d361","isMergeCommit":false,"messageTitle":"Fix checkstyle violation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":5}}},{"hash":"7a54cf286c00c3cf7864d2bc4859e14c0e4c9a4d","isMergeCommit":true,"messageTitle":"Merge pull request #35 from TeoHaoZhi/HaoZhi-JUnitTestForHelpFeature","messageBody":"Add Junit test for help command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"bac5f0f114fe6974123b6090f5bfc2ad035bbf64","isMergeCommit":false,"messageTitle":"Edit Junit test for help","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":13,"deletions":13}}},{"hash":"e5380e513c5f79d6570dca09171f3f1fc58402d2","isMergeCommit":true,"messageTitle":"Merge pull request #36 from TeoHaoZhi/HaoZhi-JUnitTestForHelpFeature","messageBody":"Edit Junit test for help","fileTypesAndContributionMap":{}},{"hash":"350fcc060811c2f4e25cb36254f2bd7845ea9338","isMergeCommit":false,"messageTitle":"Add methods to write to txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":0}}},{"hash":"a46e5821d0bcebdf8cc07433cfb197f7fd91490b","isMergeCommit":false,"messageTitle":"Update method to append to txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4}}},{"hash":"d25c1fefd9e13e3320c18ff49032c4dfc91e93a4","isMergeCommit":false,"messageTitle":"Add login system class to handle login features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":124,"deletions":0}}},{"hash":"366c60438a5b4307401d2af9368d4c60d28dc73f","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"be08c4a84413626b9f7bcc47b0264320f8ecb7bd","isMergeCommit":true,"messageTitle":"Merge pull request #37 from TeoHaoZhi/HaoZhi-LoginFeatureAttempt1","messageBody":"Add login system class","fileTypesAndContributionMap":{}},{"hash":"d2aef4c2cf81d80323363559b85cd7dcc5aad9d1","isMergeCommit":false,"messageTitle":"Fix infinite while loop","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"5847e7d3f2046d0a5d03b96582f032e83b8d2443","isMergeCommit":false,"messageTitle":"Fix bug of overwriting txt file instead of adding to it","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":4}}},{"hash":"f4fec5773b73e56a551fc2f99440e3b21f9646b1","isMergeCommit":false,"messageTitle":"Fix bugs in login system class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":89,"deletions":17}}},{"hash":"c35451f09fa1f1f1423fa4e8ad3d75679d362e2b","isMergeCommit":false,"messageTitle":"FIx Bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":20}}},{"hash":"7617592e5273ba22fa90061e426827bbed215362","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":6}}}]},{"date":"2023-10-12","commitResults":[{"hash":"ab49cf95fb9ceab78bfb2b6c312dbd694de75ff9","isMergeCommit":false,"messageTitle":"FIx bug causing failing CI test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":27}}},{"hash":"5323884d9709dde52cf9cd1670bc8f9274e3ad90","isMergeCommit":true,"messageTitle":"Merge pull request #38 from TeoHaoZhi/HaoZhi-LoginFeatureAttempt1","messageBody":"Login attempt bug fix 1","fileTypesAndContributionMap":{}},{"hash":"5b76d7f4809b669df3bcaab0d3c8c352d856d267","isMergeCommit":false,"messageTitle":"Fix printing formatting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":17}}}]},{"date":"2023-10-14","commitResults":[{"hash":"10259ca61e695c8802fec0130f28e74e79e8e7a5","isMergeCommit":false,"messageTitle":"Add assertion for login system","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"other":{"insertions":1,"deletions":0}}},{"hash":"988ee96196908057baaa52e3c90e60bf2eda330c","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"6aaeb409f9ed28c1096b87feda862eff1758f9c5","isMergeCommit":false,"messageTitle":"Edit runtest.sh file to disable it","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"e917a9b035a3b985e45f43336a0e3e88a1438d6f","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3},"test-code":{"insertions":1,"deletions":1}}},{"hash":"28336545c9ca20145bd634e797f0ac345650ab7e","isMergeCommit":false,"messageTitle":"Edit runtest.bat to disable IO test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"389f5999bc5fcee00d3e38aa2b8e6693fcbad44d","isMergeCommit":true,"messageTitle":"Merge pull request #40 from TeoHaoZhi/HaoZhi-BugfixLogin","messageBody":"Add assertion for login system","fileTypesAndContributionMap":{}},{"hash":"fd5869a315e63b3e4c9daa003af97dcd133a587e","isMergeCommit":false,"messageTitle":"Added messages to let UI handle printing of messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":19}}},{"hash":"38a69c177d2e593158303f95f1e3f2a5e2134ab5","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":70,"deletions":22}}},{"hash":"a4be93035d88733cf3f1953bda32ace09527017b","isMergeCommit":true,"messageTitle":"Merge pull request #41 from TeoHaoZhi/LoginMessagesFix","messageBody":"Added messages to let UI handle printing of messages","fileTypesAndContributionMap":{}},{"hash":"3528ac948b94285edb8196292d9955d1559b06dc","isMergeCommit":false,"messageTitle":"Update javadoc for login system class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":3}}},{"hash":"724368c8a4964dddcb0e716f7d37672d523d20f3","isMergeCommit":true,"messageTitle":"Merge pull request #42 from TeoHaoZhi/HaoZhi-JavaDocLoginSystem","messageBody":"Update javadoc for login system class","fileTypesAndContributionMap":{}},{"hash":"c9782f17e67050c1dd5b05b5ff7b3dba093e6780","isMergeCommit":false,"messageTitle":"Added java doc for file storage class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":3}}},{"hash":"01e37de8ce32537e7df7854fa385be003f07ea71","isMergeCommit":true,"messageTitle":"Merge pull request #43 from TeoHaoZhi/Javadoc","messageBody":"Added java doc for file storage class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"8573f29dd50f626312f717999098767234e5ab67","isMergeCommit":false,"messageTitle":"Add userguide on login system","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":59,"deletions":20}}},{"hash":"df15ef01089d4ccc1210bc929a19a5bc0c69095a","isMergeCommit":false,"messageTitle":"Fix Junit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":12},"test-code":{"insertions":47,"deletions":30}}},{"hash":"f68a2eea9a7c6a51fc7ed0980c82bbe61486a20c","isMergeCommit":true,"messageTitle":"Merge pull request #47 from TeoHaoZhi/HaoZhi-MarkDown","messageBody":"Edit userguide","fileTypesAndContributionMap":{}},{"hash":"1ec8b571b25dada302c74e04f3398697ab08a189","isMergeCommit":false,"messageTitle":"Fix bug of blank input for username and password","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":8}}},{"hash":"6f77ee60f5ed10366ecfbcc8a3d26b20f5c9d528","isMergeCommit":true,"messageTitle":"Merge pull request #48 from TeoHaoZhi/LoginSystemBlankinput","messageBody":"Fix bug of blank input for username and password","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"b6cb73dbbfd6780178d32c3949b2fd24f046e11e","isMergeCommit":true,"messageTitle":"Merge pull request #50 from Barbaracwx/branch-FindCommandNew","messageBody":"Branch find command new","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"2d9902628161064ffcd7105230dd6fa765b188ca","isMergeCommit":false,"messageTitle":"Update user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}},{"hash":"e01effd8dc540db39d938e72fa2dc7d0f0cb72b5","isMergeCommit":true,"messageTitle":"Merge pull request #54 from TeoHaoZhi/HaoZhi-UpdateUserGuide","messageBody":"Update user guide","fileTypesAndContributionMap":{}},{"hash":"f53e9e97737095dc7367aba076d5f5f98d120061","isMergeCommit":true,"messageTitle":"Merge pull request #55 from Barbaracwx/branch-TestCodeFindCommand","messageBody":"Added j unit test","fileTypesAndContributionMap":{}},{"hash":"14271486fb1978d5c85475b176ff6f34c0160998","isMergeCommit":true,"messageTitle":"Merge pull request #52 from karishma-t/karishma-DeleteCommand","messageBody":"Add delete command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7d3d19836e43e535ca879db7a2f24e84fb2ade61","isMergeCommit":true,"messageTitle":"Merge pull request #57 from Barbaracwx/master","messageBody":"changed findCommand to add ui class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"29f5aec77019ca6585b88faf87f1c5a812cb8663","isMergeCommit":true,"messageTitle":"Merge pull request #60 from Barbaracwx/branch-assertionStatement","messageBody":"added assertion statement","fileTypesAndContributionMap":{}},{"hash":"9c0f2d2c8ce561200f6b7c15c96d645ef87c2357","isMergeCommit":true,"messageTitle":"Merge pull request #61 from Barbaracwx/branch-CodeTest","messageBody":"edited FindCommandTest cases","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"0d83e630f1be68cc6ee693a7e8e8efd07703d072","isMergeCommit":true,"messageTitle":"Merge pull request #64 from Barbaracwx/branch-FindCommandName","messageBody":"add find command using both name and date","fileTypesAndContributionMap":{}},{"hash":"a5ce4e7ef58f1828ca4061d12735e197f8b1d03e","isMergeCommit":true,"messageTitle":"Merge pull request #66 from Barbaracwx/branch-UserGuide","messageBody":"changed user guide according to new find function","fileTypesAndContributionMap":{}},{"hash":"b24a4051f1319ef08dcf942aa00fd5002f86b3f3","isMergeCommit":false,"messageTitle":"Add register and login commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":28}}},{"hash":"d48892620bf2425f4d20f7bf67f119d866e7aba6","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":6},"test-code":{"insertions":12,"deletions":2}}},{"hash":"41b3713088803f0fa62c1701e642c1a7f82f3de0","isMergeCommit":true,"messageTitle":"Merge pull request #68 from TeoHaoZhi/HaoZhi-RegisterClass","messageBody":"Add register command and login command","fileTypesAndContributionMap":{}},{"hash":"7cc709dbb251572295f802094e1290f43d252837","isMergeCommit":false,"messageTitle":"Update userguide to reflect register and login feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":54,"deletions":2}}},{"hash":"2d8343571d10857aae93337064ae0f04eac9105b","isMergeCommit":true,"messageTitle":"Merge pull request #69 from TeoHaoZhi/HaoZhi-UpdateUserGuide","messageBody":"Update userguide to reflect register and login feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"0bf3c4287787d2f9b4bea2ea4dd9c5fdb0da70da","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":93,"deletions":6},"test-code":{"insertions":5,"deletions":0}}},{"hash":"b18733d8b51c292afa238a16e6cb240638acb2e3","isMergeCommit":true,"messageTitle":"Merge pull request #71 from TeoHaoZhi/HaoZhi-SaveFeature","messageBody":"Add save feature","fileTypesAndContributionMap":{}},{"hash":"f3cc4e3e29ffde5997c1ebbea5db55f590d3e8ff","isMergeCommit":false,"messageTitle":"Update Userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":27,"deletions":1}}},{"hash":"5f4541a2603dfded61643c40c14e898d37ae263d","isMergeCommit":true,"messageTitle":"Merge pull request #72 from TeoHaoZhi/HaoZhi-UpdateUserGuide","messageBody":"Update Userguide","fileTypesAndContributionMap":{}},{"hash":"5d82131cb223c10000d72b98f149435e68aba0e8","isMergeCommit":false,"messageTitle":"Update Developer guide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"docs":{"insertions":46,"deletions":0}}},{"hash":"b791625622c1516b144b9178b6a788114f82cfa8","isMergeCommit":true,"messageTitle":"Merge pull request #73 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer guide","fileTypesAndContributionMap":{}},{"hash":"0699a596754f2b7bcc9f8b9c8be51117e12076c8","isMergeCommit":false,"messageTitle":"Update DeveloperGuide to include login system component","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":69,"deletions":3}}},{"hash":"718424751b2e26e41abb1a6a086f72f8d92057cb","isMergeCommit":true,"messageTitle":"Merge pull request #74 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update DeveloperGuide to include login system component","fileTypesAndContributionMap":{}},{"hash":"b28bae84c2fa402631c454cf16c43958e15246f8","isMergeCommit":false,"messageTitle":"Add exception handling for authenticateUserChoice method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":64},"test-code":{"insertions":0,"deletions":32}}},{"hash":"09293249c3f92cca9610c6b6ba142746f72f48bc","isMergeCommit":false,"messageTitle":"Add Java Docs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":3}}},{"hash":"caf33c93038f985dd0c421a78c1fc6ef14488a58","isMergeCommit":false,"messageTitle":"Add Java docs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":3}}},{"hash":"7f6e4dff2b472cb0a5c1c4ce0ecee507b448bc43","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}},{"hash":"f1c6fa86da1e89edb3bb0802ead8b106089ea597","isMergeCommit":true,"messageTitle":"Merge pull request #75 from TeoHaoZhi/HaoZhi-Exceptions","messageBody":"Add execeptions and java docs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"9fea2f7bfa79c6c199ae33ed4f31dd788db2db55","isMergeCommit":true,"messageTitle":"Merge pull request #76 from martinschnder/sellCommand","messageBody":"Modify inventory structure and add all the command needed to make a sale","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"343ee190fb97f978ea49283551f6b591dd74267d","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":1}}},{"hash":"667c4a20e434525f5a1a9f4039e3c5656142ab8b","isMergeCommit":true,"messageTitle":"Merge pull request #78 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"0a9460e3de3e58fce483e11d6e315f2a2a66ea09","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"d6550e227a02e5ad46ede2649311aef426157414","isMergeCommit":true,"messageTitle":"Merge pull request #79 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"c92c67f4c1c94bc78dc52f58b399463f79446b6d","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}},{"hash":"703a81938475b50a9ace0d9f0cdf0cb8af2b34f7","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":0}}},{"hash":"0baae65260c6fd8d638c021533b2542c4303c532","isMergeCommit":true,"messageTitle":"Merge pull request #81 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"68c9a0f44cb5a6028a69c5594fc19067342b1bab","isMergeCommit":true,"messageTitle":"Merge pull request #80 from Barbaracwx/branch-DeveloperGuide","messageBody":"updated Developer\u0027s Guide","fileTypesAndContributionMap":{}},{"hash":"6adc3cfd32ab71f4d124fc8771bd03d92a8c4cc9","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":3}}},{"hash":"33e5b4e4146befa4911d42d109c138db7dea126c","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"f6dc78291cee2f7449a9d394b0ddd239d5741a5a","isMergeCommit":true,"messageTitle":"Merge pull request #82 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"505f9c3c012219f07d38e5f2d03df9b2c8279921","isMergeCommit":true,"messageTitle":"Merge pull request #83 from Barbaracwx/branch-developersguideNew","messageBody":"updated developer\u0027s guide","fileTypesAndContributionMap":{}},{"hash":"674724af608464b0234c47546677d88ec094dba1","isMergeCommit":true,"messageTitle":"Merge pull request #85 from Barbaracwx/master","messageBody":"added uml diagrams","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"21d68cfa0f59bf19906c45126f282343b31d5e46","isMergeCommit":true,"messageTitle":"Merge pull request #89 from Barbaracwx/findcommandtest","messageBody":"Findcommandtest","fileTypesAndContributionMap":{}},{"hash":"1a0eacc8cf28b010d683eb8d3a33a54ec95817d1","isMergeCommit":true,"messageTitle":"Merge pull request #91 from karishma-t/karishma-Developer-Guide","messageBody":"Modify DG for delete","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"e3356ce5fbcc07cc6748c03ac24376471d6d0a67","isMergeCommit":false,"messageTitle":"Update UML","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":20}}},{"hash":"71b41675d7a09a3cb8d6dd173ec740a1a998ce8d","isMergeCommit":true,"messageTitle":"Merge pull request #93 from TeoHaoZhi/UML","messageBody":"Update UML","fileTypesAndContributionMap":{}},{"hash":"e14d45429110d0454025237a1fb5c3259767bfa8","isMergeCommit":false,"messageTitle":"Add addVendor Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":116,"deletions":16}}},{"hash":"b284882a9d1d2fd1a2ab200a0535cf84893fbe81","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":14}}},{"hash":"e4693841e4871364b409a2e567344d3b2d1c6d20","isMergeCommit":true,"messageTitle":"Merge pull request #95 from Barbaracwx/branch-StockLevel","messageBody":"added new stock level command","fileTypesAndContributionMap":{}},{"hash":"ec3e45d82c30f673e4397e7ff92f81036c1ee804","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Vendors","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"16c103da5094704ef33f3bcce063383e7d27b627","isMergeCommit":true,"messageTitle":"Merge pull request #94 from TeoHaoZhi/Vendors","messageBody":"Add addVendor Feature","fileTypesAndContributionMap":{}},{"hash":"7771c5e3be64819ed47f08353d536e8597dd27b9","isMergeCommit":false,"messageTitle":"Fix addVendor bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"59675fad58796c4a82fbbeebc773a67e88b1f63c","isMergeCommit":true,"messageTitle":"Merge pull request #98 from TeoHaoZhi/Vendors","messageBody":"Fix addVendor bug","fileTypesAndContributionMap":{}},{"hash":"dd8be75f2dcad5340c4c1c01f8bc3b07d81ec7a6","isMergeCommit":false,"messageTitle":"Fix abstraction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":31}}},{"hash":"8003e19cfac858b4a412d0893f0fea135324c2d9","isMergeCommit":true,"messageTitle":"Merge pull request #99 from TeoHaoZhi/FixAbstraction","messageBody":"Fix abstraction","fileTypesAndContributionMap":{}},{"hash":"0d5a92c12ad67bc214a2b6cf1577ed6e04088fe9","isMergeCommit":false,"messageTitle":"Add VendorList Feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":1},"test-code":{"insertions":61,"deletions":47}}},{"hash":"ade809a860d139a306dde45776fa856e5b1ebf30","isMergeCommit":true,"messageTitle":"Merge pull request #101 from TeoHaoZhi/VendorListFeature","messageBody":"Add VendorList Feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"6cc361564e253b755fbd64da229ec2b717368599","isMergeCommit":false,"messageTitle":"Update Java Docs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":2}}},{"hash":"7544968cd74382ab68734fe61607008395dd4610","isMergeCommit":true,"messageTitle":"Merge pull request #102 from TeoHaoZhi/Javadoc","messageBody":"Update Java Docs","fileTypesAndContributionMap":{}},{"hash":"c6381578a9674e214188ccce351a9f40b917e5be","isMergeCommit":false,"messageTitle":"Update User guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":2}}},{"hash":"fef7feda7f40d84f6f849e6dd19c1a2f9f44f461","isMergeCommit":true,"messageTitle":"Merge pull request #103 from TeoHaoZhi/UserGuide","messageBody":"Update User guide and UML diagram","fileTypesAndContributionMap":{}}]}],"Barbaracwx":[{"date":"2023-10-05","commitResults":[{"hash":"91e8e21dc2263c8657a5df7cb911512e24f1bf43","isMergeCommit":false,"messageTitle":"Added Barbara.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"ad260c19eda658e1aa9478315b4eb25553e0b865","isMergeCommit":true,"messageTitle":"Merge branch \u0027Barbaracwx-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"4e4b091ddc0b16dd22533420b4b27b848a03b825","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"180b32eebac4e0d2436dabe817edb0cba055abd9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"84b79a21099e3b74dc3e06f5eba86dff72264aba","isMergeCommit":false,"messageTitle":"Add Find Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":15}}},{"hash":"86beea836dfe6c2c103e3f4d3fdb76fc7d9d0a35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-findCommand\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"7d4f40b7f2bed79141a458898b06fca9f8c62587","isMergeCommit":false,"messageTitle":"add new find function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":15}}}]},{"date":"2023-10-17","commitResults":[{"hash":"ddcac51425f93cb187d620c962346d2b3d9751e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-3:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c51866c18f620a0e7d5156750805158e33e2e100","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-3/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95245940faaa042c2d33722b8d8d0560849a3bb6","isMergeCommit":false,"messageTitle":"Added j unit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":23,"deletions":0}}},{"hash":"4ff1edf92e602aa27f78e0c3d3a41d6c79330085","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-3:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3791585a90b35d360f8a80b8f48d5b2f9116505e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06e11cafceac7c118b71d331893b25db1f57c313","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-3:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c2fa2315a0de008062a8b5cf5841c290b1a243ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-3/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"2b72a18f3da1599eaf69f5d70a5773b82e6a3748","isMergeCommit":false,"messageTitle":"change find command class to add ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":11},"test-code":{"insertions":16,"deletions":6}}},{"hash":"397da38e3c33d4dd15025228a9c9c85e7ffb7a11","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"5f6c065cadd0495287d2833fc544ae57491a64f0","isMergeCommit":false,"messageTitle":"added assertion statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"44e4e274eed15e597cb23df11f610716ebd52ccf","isMergeCommit":false,"messageTitle":"edited FindCommandTest cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":1},"test-code":{"insertions":10,"deletions":2}}}]},{"date":"2023-10-20","commitResults":[{"hash":"b06f328e50f72cc60b07d213aa938ba3f60e0309","isMergeCommit":false,"messageTitle":"add find command using both name and date","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":11},"test-code":{"insertions":8,"deletions":3}}},{"hash":"56171fad030833f03447323c39661904f90662ff","isMergeCommit":false,"messageTitle":"changed user guide according to new find function","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":15}}}]},{"date":"2023-10-25","commitResults":[{"hash":"03d6f232ad01fbb68be912b33d89572d9c519e89","isMergeCommit":false,"messageTitle":"updated Developer\u0027s Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":55,"deletions":21}}},{"hash":"c235d47ce2aa21b70716cada4e37cc434e015d30","isMergeCommit":false,"messageTitle":"updated developer\u0027s guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":1}}},{"hash":"5c3ae6371909ff03735045d6178edd07b35230f8","isMergeCommit":false,"messageTitle":"added uml diagrams","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":0}}}]},{"date":"2023-10-26","commitResults":[{"hash":"8fd0581bb131c46c9d2c4dcb3c609de4d35d5939","isMergeCommit":false,"messageTitle":"added more find command test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":14},"test-code":{"insertions":51,"deletions":12}}},{"hash":"080c98c29d89a1138a24193e168dfb7768f4f1a8","isMergeCommit":false,"messageTitle":"added more find command test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":16},"test-code":{"insertions":16,"deletions":3}}}]},{"date":"2023-10-28","commitResults":[{"hash":"bc7d8f25061432371b62776859d16689283ed7f8","isMergeCommit":false,"messageTitle":"added new stock level command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":113,"deletions":45},"test-code":{"insertions":5,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"karishma-t":{"docs":58,"functional-code":18,"test-code":25},"martinschnder":{"docs":52,"functional-code":747,"test-code":87,"other":2},"azfarulmatin":{"docs":48,"functional-code":75,"test-code":15},"TeoHaoZhi":{"docs":445,"functional-code":805,"test-code":86,"other":3},"Barbaracwx":{"docs":204,"functional-code":175,"test-code":102}},"authorContributionVariance":{"karishma-t":286.78458,"martinschnder":20519.947,"azfarulmatin":811.8474,"TeoHaoZhi":16457.14,"Barbaracwx":2539.532},"authorDisplayNameMap":{"karishma-t":"CS2113-T17-3 KARI..ARAN","martinschnder":"CS2113-T17-3 SCHN..ILLE","azfarulmatin":"CS2113-T17-3 AZFA..ANDI","TeoHaoZhi":"CS2113-T17-3 TEO .. ZHI","Barbaracwx":"CS2113-T17-3 CHON..BARA"}} +{"authorDailyContributionsMap":{"karishma-t":[{"date":"2023-10-05","commitResults":[{"hash":"9b179211347fe7a0942693aea92a880a72243999","isMergeCommit":false,"messageTitle":"Add files for Karishma about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":4}}},{"hash":"ec15853438ef4adb88f2bbcc87f367804d35788d","isMergeCommit":false,"messageTitle":"Conflict resolution","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"5c174ca4cdfe79c6b173c68db27721f92aa0f615","isMergeCommit":false,"messageTitle":"Add delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":13}}},{"hash":"4c7d28ae3f51a16116cf790aabeb170d9ffaad80","isMergeCommit":false,"messageTitle":"Add junit test for Delete command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":0}}},{"hash":"ed041352034696e09d01385f720d3f3a72037c62","isMergeCommit":false,"messageTitle":"Modify to pass checkstyle tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3},"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-26","commitResults":[{"hash":"521a48339b7e42ceb652e3e1d147a6c5b485792b","isMergeCommit":false,"messageTitle":"Modify DG for delete","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":53,"deletions":0}}}]}],"martinschnder":[{"date":"2023-10-07","commitResults":[{"hash":"d13e4519f0e878a3e9be46a05a57ee90c57539c8","isMergeCommit":false,"messageTitle":"Add martin portofolio and picture and update about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":1}}},{"hash":"2dbd0893fe8f3dac09ed84bb33c414c0e90c74e2","isMergeCommit":true,"messageTitle":"Merge pull request #12 from martinschnder/martin-AboutUs","messageBody":"Add martin portofolio and picture and update about us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"eca592d2600d2253010eebbf55c4217a971ca79b","isMergeCommit":false,"messageTitle":"Updated build.gradle to match new main class name","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"f9bf0f4dcbf0dc02f210e21283f8f18ddf745d2a","isMergeCommit":false,"messageTitle":"Reorganize files in various packages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":9},"other":{"insertions":2,"deletions":2}}},{"hash":"dd4cb2baf5df643afbefe71a963a78e7489a79b2","isMergeCommit":false,"messageTitle":"Create abstract command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}},{"hash":"0a4ae29a7ca56b747974f29fc720e496c0cebaa3","isMergeCommit":false,"messageTitle":"Add the addclass and rename the druglist class to inventory","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":101,"deletions":19}}},{"hash":"9891fe1ce7e876b766da0e19a647588a3845d02d","isMergeCommit":false,"messageTitle":"Delete old file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":14}}},{"hash":"c76880c8d3ba9f7555f17105e6689822950877aa","isMergeCommit":false,"messageTitle":"Implement ExitCommand and AddCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":316,"deletions":18}}}]},{"date":"2023-10-10","commitResults":[{"hash":"dce79f9038b5eade80126270475b9775283d2fd2","isMergeCommit":false,"messageTitle":"Add ui and addcommand testing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":29,"deletions":1}}}]},{"date":"2023-10-11","commitResults":[{"hash":"8910d7979fdebe5386871de9ea2cda42c5161370","isMergeCommit":false,"messageTitle":"Change the line separator character","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"d0a83e9fe5ed5a7cc13594979f0803fa8e9a2374","isMergeCommit":false,"messageTitle":"Change the line separator character in the UI class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"55d760266b318ad23fbab35a6d1857c73c063d17","isMergeCommit":true,"messageTitle":"Merge pull request #34 from martinschnder/addDrug-unit-tests","messageBody":"Add ui and addcommand testing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"7646870a909320f59cefb562285e62abc23ef833","isMergeCommit":false,"messageTitle":"Modify inventory structure and add all the command needed to make a sale (addtocart, viewcart, checkout)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":402,"deletions":131},"test-code":{"insertions":23,"deletions":15}}},{"hash":"1134e5d481615a014073af9031ca71061ff42878","isMergeCommit":false,"messageTitle":"Fix load function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":15}}},{"hash":"4e4ef4698675691973d77ae7481e1ee117537acf","isMergeCommit":false,"messageTitle":"Add better exception handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":18}}},{"hash":"a075bd1720fd4eac5e8c090a897225d5d2057e6d","isMergeCommit":false,"messageTitle":"Update helpcommand with new commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":4},"test-code":{"insertions":43,"deletions":28}}}]},{"date":"2023-10-24","commitResults":[{"hash":"0a64a48a68acc1accbbfec26dd81f3df9574df9c","isMergeCommit":false,"messageTitle":"Add tests for AddToCart command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":27,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"b4d2647664ddb9696b52554ddbe328b730297a98","isMergeCommit":false,"messageTitle":"Add main data structures in developerGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":46,"deletions":21}}},{"hash":"18929947f4248686faad3b70fbff3687c9c19c3b","isMergeCommit":true,"messageTitle":"Merge pull request #84 from martinschnder/developerGuide","messageBody":"Add main data structures in developerGuide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"49bfbffa868b148a46b27908dabf16ebfd74cd63","isMergeCommit":true,"messageTitle":"Merge pull request #92 from Barbaracwx/findcommandtest","messageBody":"added sequence diagram","fileTypesAndContributionMap":{}},{"hash":"50d338b34b24893e5dca5485f21f08ff4ca6e60c","isMergeCommit":true,"messageTitle":"Merge pull request #113 from Barbaracwx/branch-alert","messageBody":"updated set threshold command","fileTypesAndContributionMap":{}}]}],"azfarulmatin":[{"date":"2023-10-07","commitResults":[{"hash":"6c8ee942babd12a205caa1b7e098fcb6340f76a9","isMergeCommit":false,"messageTitle":"Update Azfarul About us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"05e7ef8ec96488ea4719dfc0372532fe8e5694de","isMergeCommit":true,"messageTitle":"Merge pull request #19 from azfarulmatin/master","messageBody":"Update Azfarul About us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"d5afb6bfea43555f6f259a086b672acaefd20e59","isMergeCommit":false,"messageTitle":"Add List function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":110,"deletions":29}}},{"hash":"57a05c0bd5b98cc8b3bafc5eb9a158684e7aa058","isMergeCommit":true,"messageTitle":"Merge pull request #44 from azfarulmatin/AzfarulMatin-ListCommand","messageBody":"Add List function","fileTypesAndContributionMap":{}},{"hash":"4a24ed0a7c4ba4280e8279f225d94eca57adc5eb","isMergeCommit":false,"messageTitle":"Fix checkstyle and junit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":15}}},{"hash":"a1860305e34b8c74ade793866b25205f953c8319","isMergeCommit":true,"messageTitle":"Merge pull request #45 from azfarulmatin/AzfarulMatin-ListCommand","messageBody":"Fix checkstyle and junit test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"1dda9d2754e2a02578da9238442c6d10f7e66d6f","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":16,"deletions":0}}},{"hash":"440fa5dc27d5fd869d27429012fdbe5aeeae7619","isMergeCommit":true,"messageTitle":"Merge pull request #46 from azfarulmatin/AzfarulMatin-JUnitTestListCommand","messageBody":"Add JUnit Test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"3887203ffba5c298294ab19aea34a4d3ed459f58","isMergeCommit":false,"messageTitle":"Add assertions for ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"09522dd36305e098a7b90627e22eb45576b25579","isMergeCommit":true,"messageTitle":"Merge pull request #65 from azfarulmatin/master","messageBody":"Add assertions for ListCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"48b64546002893200c17724ba054f54c1593848a","isMergeCommit":false,"messageTitle":"Update ListCommand in Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":0}}},{"hash":"c9f60b4f7e954b7f51ac2623133f116e513fd8d7","isMergeCommit":true,"messageTitle":"Merge pull request #87 from azfarulmatin/AzfarulMatin-DeveloperGuide","messageBody":"Update ListCommand in Developer Guide","fileTypesAndContributionMap":{}}]}],"TeoHaoZhi":[{"date":"2023-10-05","commitResults":[{"hash":"f2bef309abc1a31812e5cb92d52cc3edc1ea44c6","isMergeCommit":false,"messageTitle":"Update UserGuide.md to add theme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}},{"hash":"80b42e7c9d1a437ae8bed5f38e44c218f440f47c","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Barbaracwx/Barbaracwx-AboutUs","messageBody":"Added Barbara.md","fileTypesAndContributionMap":{}},{"hash":"aa9ba0c6a59865a89b52a6f53b7df1df57bb99de","isMergeCommit":false,"messageTitle":"Add files for Hao Zhi\u0027s about us page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"78381da48ea0ab8048ffca83fc47af7dd59e458b","isMergeCommit":true,"messageTitle":"Merge branch \u0027HaoZhi-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0c3018bd7af6a34e46ede0867b55d0a498285ce","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5034d288227d95c1a28ecc2359f1ea357dd3b437","isMergeCommit":true,"messageTitle":"Merge pull request #3 from TeoHaoZhi/master","messageBody":"Add HaoZhi\u0027s about us files","fileTypesAndContributionMap":{}},{"hash":"88803a7aec4b841305b2a7716850e466193ec107","isMergeCommit":false,"messageTitle":"Clean up UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-06","commitResults":[{"hash":"220ea22f86c3d933219eefa1ae6e0c2fabea1d44","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into karishma-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"800151596e695fdfd13c417def35fd80dc78fed4","isMergeCommit":true,"messageTitle":"Merge pull request #10 from karishma-t/karishma-AboutUs","messageBody":"Add Karishma about us","fileTypesAndContributionMap":{}},{"hash":"4a53af6054886017e9cf732a597960c970f202d4","isMergeCommit":false,"messageTitle":"Fix about us portfolio bug","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"eb792a86d1eb0fd6ea4e2bca18a1ed4e10c07661","isMergeCommit":true,"messageTitle":"Merge pull request #11 from TeoHaoZhi/master","messageBody":"Fix about us portfolio bug","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"090f7fd2112203bcd0f818c6a79ab83c1945118e","isMergeCommit":false,"messageTitle":"Rename classes","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":4,"deletions":4}}},{"hash":"cd37b8a6e9414c1fa24b68559ff23066fde03931","isMergeCommit":true,"messageTitle":"Merge pull request #23 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Rename classes","fileTypesAndContributionMap":{}},{"hash":"293aa145c39d8d91f975a08e7f0c8f491234cd7e","isMergeCommit":false,"messageTitle":"Add dummy classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":0}}},{"hash":"3d5504d42b2532eadb56b49ff210b09cdd50284c","isMergeCommit":true,"messageTitle":"Merge pull request #24 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add dummy classes","fileTypesAndContributionMap":{}},{"hash":"d842866453c774e4e7cb523fc0f6d99109564fbb","isMergeCommit":false,"messageTitle":"Add attributes to drug class","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1},"test-code":{"insertions":46,"deletions":20}}},{"hash":"7988e7aab82f83af8ed057426371bc9f8066e5c2","isMergeCommit":true,"messageTitle":"Merge pull request #25 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add attributes to drug class","fileTypesAndContributionMap":{}},{"hash":"1746b905d7c8f9941ce95abe0c601ed7a555d341","isMergeCommit":false,"messageTitle":"Add help feature to UI class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":1}}},{"hash":"227af0572b033254d6546284a0ee2f875a71c3a9","isMergeCommit":true,"messageTitle":"Merge pull request #26 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add help feature to UI class","fileTypesAndContributionMap":{}},{"hash":"7299b86db5d860ab190c91abd4c6962273b196cd","isMergeCommit":false,"messageTitle":"Add exit point for programme","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":58,"deletions":11},"other":{"insertions":0,"deletions":0},"test-code":{"insertions":0,"deletions":49}}},{"hash":"de4799c7421e4b4195b2576cd2425462d6a6fa0e","isMergeCommit":true,"messageTitle":"Merge pull request #27 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Add exit point for programme","fileTypesAndContributionMap":{}},{"hash":"354c79d2f7cbb08fb7700ca95ef4ca362f2c172d","isMergeCommit":false,"messageTitle":"Refactor printing for help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":24}}},{"hash":"8ab6c94c4d553c98bdc4616b2841d95fea09e2e7","isMergeCommit":true,"messageTitle":"Merge pull request #28 from TeoHaoZhi/HaoZhi-TemplateAttempt2","messageBody":"Refactor printing for help command","fileTypesAndContributionMap":{}},{"hash":"5bf20560cb92c584383123cf1ba209e1943da17b","isMergeCommit":false,"messageTitle":"Add Junit test for help feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":5},"test-code":{"insertions":47,"deletions":0}}},{"hash":"0cce6790d3939b1aa5f6309f8c81e87f8490dceb","isMergeCommit":true,"messageTitle":"Merge pull request #29 from TeoHaoZhi/HaoZhi-JUnitTestForHelpFeature","messageBody":"Add Junit test for help feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"44f897c607a7bf71459ce63ef7a22368d8374d2c","isMergeCommit":true,"messageTitle":"Merge pull request #30 from martinschnder/branch-AddCommand","messageBody":"Branch add command","fileTypesAndContributionMap":{}},{"hash":"38f4573bdbf922271274ff418303a83c5ba9778e","isMergeCommit":false,"messageTitle":"Add more class templates","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":22}}},{"hash":"7ab218bb640ddf7a60822ecd133989bcd0d2a220","isMergeCommit":true,"messageTitle":"Merge pull request #31 from TeoHaoZhi/HaoZhi-ListCommandHelp","messageBody":"Add more class templates","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"e366c56327163c3ebdcc63a2889b90ea43218e50","isMergeCommit":false,"messageTitle":"Update userguide markdown file","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":154,"deletions":12}}},{"hash":"67f9f7118ed7fe8c06884e7757e87e6c634fa6d8","isMergeCommit":true,"messageTitle":"Merge pull request #32 from TeoHaoZhi/HaoZhi-UserGuideUpdateV1.0","messageBody":"Update userguide markdown file","fileTypesAndContributionMap":{}},{"hash":"b6fd34963d346c40de9d71cb9ea43699a14d4b8d","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":2}}},{"hash":"a3f768d82e7036ec93e0543e7c2db1847279aa1c","isMergeCommit":true,"messageTitle":"Merge pull request #33 from TeoHaoZhi/HaoZhi-ReadMe","messageBody":"Update README","fileTypesAndContributionMap":{}},{"hash":"dc4311ad9d1840486a71ba7958140542108c093a","isMergeCommit":false,"messageTitle":"Add Junit test for help command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":29,"deletions":0}}},{"hash":"324c68f05643be382892df3fec2ec0d7ea16d361","isMergeCommit":false,"messageTitle":"Fix checkstyle violation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":5}}},{"hash":"7a54cf286c00c3cf7864d2bc4859e14c0e4c9a4d","isMergeCommit":true,"messageTitle":"Merge pull request #35 from TeoHaoZhi/HaoZhi-JUnitTestForHelpFeature","messageBody":"Add Junit test for help command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"bac5f0f114fe6974123b6090f5bfc2ad035bbf64","isMergeCommit":false,"messageTitle":"Edit Junit test for help","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":13,"deletions":13}}},{"hash":"e5380e513c5f79d6570dca09171f3f1fc58402d2","isMergeCommit":true,"messageTitle":"Merge pull request #36 from TeoHaoZhi/HaoZhi-JUnitTestForHelpFeature","messageBody":"Edit Junit test for help","fileTypesAndContributionMap":{}},{"hash":"350fcc060811c2f4e25cb36254f2bd7845ea9338","isMergeCommit":false,"messageTitle":"Add methods to write to txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":0}}},{"hash":"a46e5821d0bcebdf8cc07433cfb197f7fd91490b","isMergeCommit":false,"messageTitle":"Update method to append to txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4}}},{"hash":"d25c1fefd9e13e3320c18ff49032c4dfc91e93a4","isMergeCommit":false,"messageTitle":"Add login system class to handle login features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":124,"deletions":0}}},{"hash":"366c60438a5b4307401d2af9368d4c60d28dc73f","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"be08c4a84413626b9f7bcc47b0264320f8ecb7bd","isMergeCommit":true,"messageTitle":"Merge pull request #37 from TeoHaoZhi/HaoZhi-LoginFeatureAttempt1","messageBody":"Add login system class","fileTypesAndContributionMap":{}},{"hash":"d2aef4c2cf81d80323363559b85cd7dcc5aad9d1","isMergeCommit":false,"messageTitle":"Fix infinite while loop","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"5847e7d3f2046d0a5d03b96582f032e83b8d2443","isMergeCommit":false,"messageTitle":"Fix bug of overwriting txt file instead of adding to it","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":4}}},{"hash":"f4fec5773b73e56a551fc2f99440e3b21f9646b1","isMergeCommit":false,"messageTitle":"Fix bugs in login system class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":89,"deletions":17}}},{"hash":"c35451f09fa1f1f1423fa4e8ad3d75679d362e2b","isMergeCommit":false,"messageTitle":"FIx Bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":20}}},{"hash":"7617592e5273ba22fa90061e426827bbed215362","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":6}}}]},{"date":"2023-10-12","commitResults":[{"hash":"ab49cf95fb9ceab78bfb2b6c312dbd694de75ff9","isMergeCommit":false,"messageTitle":"FIx bug causing failing CI test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":27}}},{"hash":"5323884d9709dde52cf9cd1670bc8f9274e3ad90","isMergeCommit":true,"messageTitle":"Merge pull request #38 from TeoHaoZhi/HaoZhi-LoginFeatureAttempt1","messageBody":"Login attempt bug fix 1","fileTypesAndContributionMap":{}},{"hash":"5b76d7f4809b669df3bcaab0d3c8c352d856d267","isMergeCommit":false,"messageTitle":"Fix printing formatting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":17}}}]},{"date":"2023-10-14","commitResults":[{"hash":"10259ca61e695c8802fec0130f28e74e79e8e7a5","isMergeCommit":false,"messageTitle":"Add assertion for login system","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"other":{"insertions":1,"deletions":0}}},{"hash":"988ee96196908057baaa52e3c90e60bf2eda330c","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"6aaeb409f9ed28c1096b87feda862eff1758f9c5","isMergeCommit":false,"messageTitle":"Edit runtest.sh file to disable it","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"e917a9b035a3b985e45f43336a0e3e88a1438d6f","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3},"test-code":{"insertions":1,"deletions":1}}},{"hash":"28336545c9ca20145bd634e797f0ac345650ab7e","isMergeCommit":false,"messageTitle":"Edit runtest.bat to disable IO test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"389f5999bc5fcee00d3e38aa2b8e6693fcbad44d","isMergeCommit":true,"messageTitle":"Merge pull request #40 from TeoHaoZhi/HaoZhi-BugfixLogin","messageBody":"Add assertion for login system","fileTypesAndContributionMap":{}},{"hash":"fd5869a315e63b3e4c9daa003af97dcd133a587e","isMergeCommit":false,"messageTitle":"Added messages to let UI handle printing of messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":19}}},{"hash":"38a69c177d2e593158303f95f1e3f2a5e2134ab5","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":70,"deletions":22}}},{"hash":"a4be93035d88733cf3f1953bda32ace09527017b","isMergeCommit":true,"messageTitle":"Merge pull request #41 from TeoHaoZhi/LoginMessagesFix","messageBody":"Added messages to let UI handle printing of messages","fileTypesAndContributionMap":{}},{"hash":"3528ac948b94285edb8196292d9955d1559b06dc","isMergeCommit":false,"messageTitle":"Update javadoc for login system class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":3}}},{"hash":"724368c8a4964dddcb0e716f7d37672d523d20f3","isMergeCommit":true,"messageTitle":"Merge pull request #42 from TeoHaoZhi/HaoZhi-JavaDocLoginSystem","messageBody":"Update javadoc for login system class","fileTypesAndContributionMap":{}},{"hash":"c9782f17e67050c1dd5b05b5ff7b3dba093e6780","isMergeCommit":false,"messageTitle":"Added java doc for file storage class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":3}}},{"hash":"01e37de8ce32537e7df7854fa385be003f07ea71","isMergeCommit":true,"messageTitle":"Merge pull request #43 from TeoHaoZhi/Javadoc","messageBody":"Added java doc for file storage class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"8573f29dd50f626312f717999098767234e5ab67","isMergeCommit":false,"messageTitle":"Add userguide on login system","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":59,"deletions":20}}},{"hash":"df15ef01089d4ccc1210bc929a19a5bc0c69095a","isMergeCommit":false,"messageTitle":"Fix Junit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":12},"test-code":{"insertions":47,"deletions":30}}},{"hash":"f68a2eea9a7c6a51fc7ed0980c82bbe61486a20c","isMergeCommit":true,"messageTitle":"Merge pull request #47 from TeoHaoZhi/HaoZhi-MarkDown","messageBody":"Edit userguide","fileTypesAndContributionMap":{}},{"hash":"1ec8b571b25dada302c74e04f3398697ab08a189","isMergeCommit":false,"messageTitle":"Fix bug of blank input for username and password","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":8}}},{"hash":"6f77ee60f5ed10366ecfbcc8a3d26b20f5c9d528","isMergeCommit":true,"messageTitle":"Merge pull request #48 from TeoHaoZhi/LoginSystemBlankinput","messageBody":"Fix bug of blank input for username and password","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"b6cb73dbbfd6780178d32c3949b2fd24f046e11e","isMergeCommit":true,"messageTitle":"Merge pull request #50 from Barbaracwx/branch-FindCommandNew","messageBody":"Branch find command new","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"2d9902628161064ffcd7105230dd6fa765b188ca","isMergeCommit":false,"messageTitle":"Update user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}},{"hash":"e01effd8dc540db39d938e72fa2dc7d0f0cb72b5","isMergeCommit":true,"messageTitle":"Merge pull request #54 from TeoHaoZhi/HaoZhi-UpdateUserGuide","messageBody":"Update user guide","fileTypesAndContributionMap":{}},{"hash":"f53e9e97737095dc7367aba076d5f5f98d120061","isMergeCommit":true,"messageTitle":"Merge pull request #55 from Barbaracwx/branch-TestCodeFindCommand","messageBody":"Added j unit test","fileTypesAndContributionMap":{}},{"hash":"14271486fb1978d5c85475b176ff6f34c0160998","isMergeCommit":true,"messageTitle":"Merge pull request #52 from karishma-t/karishma-DeleteCommand","messageBody":"Add delete command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7d3d19836e43e535ca879db7a2f24e84fb2ade61","isMergeCommit":true,"messageTitle":"Merge pull request #57 from Barbaracwx/master","messageBody":"changed findCommand to add ui class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"29f5aec77019ca6585b88faf87f1c5a812cb8663","isMergeCommit":true,"messageTitle":"Merge pull request #60 from Barbaracwx/branch-assertionStatement","messageBody":"added assertion statement","fileTypesAndContributionMap":{}},{"hash":"9c0f2d2c8ce561200f6b7c15c96d645ef87c2357","isMergeCommit":true,"messageTitle":"Merge pull request #61 from Barbaracwx/branch-CodeTest","messageBody":"edited FindCommandTest cases","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"0d83e630f1be68cc6ee693a7e8e8efd07703d072","isMergeCommit":true,"messageTitle":"Merge pull request #64 from Barbaracwx/branch-FindCommandName","messageBody":"add find command using both name and date","fileTypesAndContributionMap":{}},{"hash":"a5ce4e7ef58f1828ca4061d12735e197f8b1d03e","isMergeCommit":true,"messageTitle":"Merge pull request #66 from Barbaracwx/branch-UserGuide","messageBody":"changed user guide according to new find function","fileTypesAndContributionMap":{}},{"hash":"b24a4051f1319ef08dcf942aa00fd5002f86b3f3","isMergeCommit":false,"messageTitle":"Add register and login commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":28}}},{"hash":"d48892620bf2425f4d20f7bf67f119d866e7aba6","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":6},"test-code":{"insertions":12,"deletions":2}}},{"hash":"41b3713088803f0fa62c1701e642c1a7f82f3de0","isMergeCommit":true,"messageTitle":"Merge pull request #68 from TeoHaoZhi/HaoZhi-RegisterClass","messageBody":"Add register command and login command","fileTypesAndContributionMap":{}},{"hash":"7cc709dbb251572295f802094e1290f43d252837","isMergeCommit":false,"messageTitle":"Update userguide to reflect register and login feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":54,"deletions":2}}},{"hash":"2d8343571d10857aae93337064ae0f04eac9105b","isMergeCommit":true,"messageTitle":"Merge pull request #69 from TeoHaoZhi/HaoZhi-UpdateUserGuide","messageBody":"Update userguide to reflect register and login feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"0bf3c4287787d2f9b4bea2ea4dd9c5fdb0da70da","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":93,"deletions":6},"test-code":{"insertions":5,"deletions":0}}},{"hash":"b18733d8b51c292afa238a16e6cb240638acb2e3","isMergeCommit":true,"messageTitle":"Merge pull request #71 from TeoHaoZhi/HaoZhi-SaveFeature","messageBody":"Add save feature","fileTypesAndContributionMap":{}},{"hash":"f3cc4e3e29ffde5997c1ebbea5db55f590d3e8ff","isMergeCommit":false,"messageTitle":"Update Userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":27,"deletions":1}}},{"hash":"5f4541a2603dfded61643c40c14e898d37ae263d","isMergeCommit":true,"messageTitle":"Merge pull request #72 from TeoHaoZhi/HaoZhi-UpdateUserGuide","messageBody":"Update Userguide","fileTypesAndContributionMap":{}},{"hash":"5d82131cb223c10000d72b98f149435e68aba0e8","isMergeCommit":false,"messageTitle":"Update Developer guide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"docs":{"insertions":46,"deletions":0}}},{"hash":"b791625622c1516b144b9178b6a788114f82cfa8","isMergeCommit":true,"messageTitle":"Merge pull request #73 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer guide","fileTypesAndContributionMap":{}},{"hash":"0699a596754f2b7bcc9f8b9c8be51117e12076c8","isMergeCommit":false,"messageTitle":"Update DeveloperGuide to include login system component","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":69,"deletions":3}}},{"hash":"718424751b2e26e41abb1a6a086f72f8d92057cb","isMergeCommit":true,"messageTitle":"Merge pull request #74 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update DeveloperGuide to include login system component","fileTypesAndContributionMap":{}},{"hash":"b28bae84c2fa402631c454cf16c43958e15246f8","isMergeCommit":false,"messageTitle":"Add exception handling for authenticateUserChoice method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":64},"test-code":{"insertions":0,"deletions":32}}},{"hash":"09293249c3f92cca9610c6b6ba142746f72f48bc","isMergeCommit":false,"messageTitle":"Add Java Docs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":3}}},{"hash":"caf33c93038f985dd0c421a78c1fc6ef14488a58","isMergeCommit":false,"messageTitle":"Add Java docs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":3}}},{"hash":"7f6e4dff2b472cb0a5c1c4ce0ecee507b448bc43","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}},{"hash":"f1c6fa86da1e89edb3bb0802ead8b106089ea597","isMergeCommit":true,"messageTitle":"Merge pull request #75 from TeoHaoZhi/HaoZhi-Exceptions","messageBody":"Add execeptions and java docs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"9fea2f7bfa79c6c199ae33ed4f31dd788db2db55","isMergeCommit":true,"messageTitle":"Merge pull request #76 from martinschnder/sellCommand","messageBody":"Modify inventory structure and add all the command needed to make a sale","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"343ee190fb97f978ea49283551f6b591dd74267d","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":1}}},{"hash":"667c4a20e434525f5a1a9f4039e3c5656142ab8b","isMergeCommit":true,"messageTitle":"Merge pull request #78 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"0a9460e3de3e58fce483e11d6e315f2a2a66ea09","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"d6550e227a02e5ad46ede2649311aef426157414","isMergeCommit":true,"messageTitle":"Merge pull request #79 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"c92c67f4c1c94bc78dc52f58b399463f79446b6d","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}},{"hash":"703a81938475b50a9ace0d9f0cdf0cb8af2b34f7","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":0}}},{"hash":"0baae65260c6fd8d638c021533b2542c4303c532","isMergeCommit":true,"messageTitle":"Merge pull request #81 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"68c9a0f44cb5a6028a69c5594fc19067342b1bab","isMergeCommit":true,"messageTitle":"Merge pull request #80 from Barbaracwx/branch-DeveloperGuide","messageBody":"updated Developer\u0027s Guide","fileTypesAndContributionMap":{}},{"hash":"6adc3cfd32ab71f4d124fc8771bd03d92a8c4cc9","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":3}}},{"hash":"33e5b4e4146befa4911d42d109c138db7dea126c","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"f6dc78291cee2f7449a9d394b0ddd239d5741a5a","isMergeCommit":true,"messageTitle":"Merge pull request #82 from TeoHaoZhi/HaoZhi-DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"505f9c3c012219f07d38e5f2d03df9b2c8279921","isMergeCommit":true,"messageTitle":"Merge pull request #83 from Barbaracwx/branch-developersguideNew","messageBody":"updated developer\u0027s guide","fileTypesAndContributionMap":{}},{"hash":"674724af608464b0234c47546677d88ec094dba1","isMergeCommit":true,"messageTitle":"Merge pull request #85 from Barbaracwx/master","messageBody":"added uml diagrams","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"21d68cfa0f59bf19906c45126f282343b31d5e46","isMergeCommit":true,"messageTitle":"Merge pull request #89 from Barbaracwx/findcommandtest","messageBody":"Findcommandtest","fileTypesAndContributionMap":{}},{"hash":"1a0eacc8cf28b010d683eb8d3a33a54ec95817d1","isMergeCommit":true,"messageTitle":"Merge pull request #91 from karishma-t/karishma-Developer-Guide","messageBody":"Modify DG for delete","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"e3356ce5fbcc07cc6748c03ac24376471d6d0a67","isMergeCommit":false,"messageTitle":"Update UML","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":20}}},{"hash":"71b41675d7a09a3cb8d6dd173ec740a1a998ce8d","isMergeCommit":true,"messageTitle":"Merge pull request #93 from TeoHaoZhi/UML","messageBody":"Update UML","fileTypesAndContributionMap":{}},{"hash":"e14d45429110d0454025237a1fb5c3259767bfa8","isMergeCommit":false,"messageTitle":"Add addVendor Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":116,"deletions":16}}},{"hash":"b284882a9d1d2fd1a2ab200a0535cf84893fbe81","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":14}}},{"hash":"e4693841e4871364b409a2e567344d3b2d1c6d20","isMergeCommit":true,"messageTitle":"Merge pull request #95 from Barbaracwx/branch-StockLevel","messageBody":"added new stock level command","fileTypesAndContributionMap":{}},{"hash":"ec3e45d82c30f673e4397e7ff92f81036c1ee804","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Vendors","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"16c103da5094704ef33f3bcce063383e7d27b627","isMergeCommit":true,"messageTitle":"Merge pull request #94 from TeoHaoZhi/Vendors","messageBody":"Add addVendor Feature","fileTypesAndContributionMap":{}},{"hash":"7771c5e3be64819ed47f08353d536e8597dd27b9","isMergeCommit":false,"messageTitle":"Fix addVendor bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"59675fad58796c4a82fbbeebc773a67e88b1f63c","isMergeCommit":true,"messageTitle":"Merge pull request #98 from TeoHaoZhi/Vendors","messageBody":"Fix addVendor bug","fileTypesAndContributionMap":{}},{"hash":"dd8be75f2dcad5340c4c1c01f8bc3b07d81ec7a6","isMergeCommit":false,"messageTitle":"Fix abstraction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":31}}},{"hash":"8003e19cfac858b4a412d0893f0fea135324c2d9","isMergeCommit":true,"messageTitle":"Merge pull request #99 from TeoHaoZhi/FixAbstraction","messageBody":"Fix abstraction","fileTypesAndContributionMap":{}},{"hash":"0d5a92c12ad67bc214a2b6cf1577ed6e04088fe9","isMergeCommit":false,"messageTitle":"Add VendorList Feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":1},"test-code":{"insertions":61,"deletions":47}}},{"hash":"ade809a860d139a306dde45776fa856e5b1ebf30","isMergeCommit":true,"messageTitle":"Merge pull request #101 from TeoHaoZhi/VendorListFeature","messageBody":"Add VendorList Feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"6cc361564e253b755fbd64da229ec2b717368599","isMergeCommit":false,"messageTitle":"Update Java Docs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":2}}},{"hash":"7544968cd74382ab68734fe61607008395dd4610","isMergeCommit":true,"messageTitle":"Merge pull request #102 from TeoHaoZhi/Javadoc","messageBody":"Update Java Docs","fileTypesAndContributionMap":{}},{"hash":"c6381578a9674e214188ccce351a9f40b917e5be","isMergeCommit":false,"messageTitle":"Update User guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":2}}},{"hash":"fef7feda7f40d84f6f849e6dd19c1a2f9f44f461","isMergeCommit":true,"messageTitle":"Merge pull request #103 from TeoHaoZhi/UserGuide","messageBody":"Update User guide and UML diagram","fileTypesAndContributionMap":{}},{"hash":"f794fa615e63df9591f96720f081f57b1e167b13","isMergeCommit":false,"messageTitle":"Update Developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":1}}},{"hash":"035e8005eabf106c4bae9247d28d93e9844c947a","isMergeCommit":true,"messageTitle":"Merge pull request #104 from TeoHaoZhi/DeveloperGuide","messageBody":"Update Developer guide","fileTypesAndContributionMap":{}},{"hash":"4d74b146a0b288d69094b0a9651b8bfb6a83d29a","isMergeCommit":false,"messageTitle":"Update Developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":0}}},{"hash":"449e91de789b9a45040398b06f64e79ba7746940","isMergeCommit":true,"messageTitle":"Merge pull request #106 from TeoHaoZhi/DeveloperGuide","messageBody":"Update Developer guide","fileTypesAndContributionMap":{}},{"hash":"9097e5b1de1d8e8f285f9963c23a981291f40d7c","isMergeCommit":true,"messageTitle":"Merge pull request #107 from Barbaracwx/branch-UGnew","messageBody":"updated UG with stock level command","fileTypesAndContributionMap":{}},{"hash":"16c27768dd4411ee65ada23e2ced21503514493f","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":1}}},{"hash":"6486fe783c57563e9785ee0d2094b56b74ba2af3","isMergeCommit":true,"messageTitle":"Merge pull request #108 from TeoHaoZhi/DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"fe61f782aaefc5bdd638ba5d44f2426f6d49475c","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":0}}},{"hash":"a0c49e6186db8768dba66f3514bdf382e81e5255","isMergeCommit":true,"messageTitle":"Merge pull request #109 from TeoHaoZhi/DeveloperGuide","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"e2c7c8aa62125a76dae3ae4eb1dee3b22e5ced5f","isMergeCommit":true,"messageTitle":"Merge pull request #110 from Barbaracwx/branch-stocklevelcommandtest","messageBody":"added stock level command test","fileTypesAndContributionMap":{}}]}],"Barbaracwx":[{"date":"2023-10-05","commitResults":[{"hash":"91e8e21dc2263c8657a5df7cb911512e24f1bf43","isMergeCommit":false,"messageTitle":"Added Barbara.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"ad260c19eda658e1aa9478315b4eb25553e0b865","isMergeCommit":true,"messageTitle":"Merge branch \u0027Barbaracwx-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"4e4b091ddc0b16dd22533420b4b27b848a03b825","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"180b32eebac4e0d2436dabe817edb0cba055abd9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"84b79a21099e3b74dc3e06f5eba86dff72264aba","isMergeCommit":false,"messageTitle":"Add Find Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":15}}},{"hash":"86beea836dfe6c2c103e3f4d3fdb76fc7d9d0a35","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-findCommand\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"7d4f40b7f2bed79141a458898b06fca9f8c62587","isMergeCommit":false,"messageTitle":"add new find function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":15}}}]},{"date":"2023-10-17","commitResults":[{"hash":"ddcac51425f93cb187d620c962346d2b3d9751e2","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-3:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c51866c18f620a0e7d5156750805158e33e2e100","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-3/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95245940faaa042c2d33722b8d8d0560849a3bb6","isMergeCommit":false,"messageTitle":"Added j unit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":23,"deletions":0}}},{"hash":"4ff1edf92e602aa27f78e0c3d3a41d6c79330085","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-3:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3791585a90b35d360f8a80b8f48d5b2f9116505e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06e11cafceac7c118b71d331893b25db1f57c313","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-3:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c2fa2315a0de008062a8b5cf5841c290b1a243ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-3/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"2b72a18f3da1599eaf69f5d70a5773b82e6a3748","isMergeCommit":false,"messageTitle":"change find command class to add ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":11},"test-code":{"insertions":16,"deletions":6}}},{"hash":"397da38e3c33d4dd15025228a9c9c85e7ffb7a11","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Barbaracwx/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"5f6c065cadd0495287d2833fc544ae57491a64f0","isMergeCommit":false,"messageTitle":"added assertion statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"44e4e274eed15e597cb23df11f610716ebd52ccf","isMergeCommit":false,"messageTitle":"edited FindCommandTest cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":1},"test-code":{"insertions":10,"deletions":2}}}]},{"date":"2023-10-20","commitResults":[{"hash":"b06f328e50f72cc60b07d213aa938ba3f60e0309","isMergeCommit":false,"messageTitle":"add find command using both name and date","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":11},"test-code":{"insertions":8,"deletions":3}}},{"hash":"56171fad030833f03447323c39661904f90662ff","isMergeCommit":false,"messageTitle":"changed user guide according to new find function","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":15}}}]},{"date":"2023-10-25","commitResults":[{"hash":"03d6f232ad01fbb68be912b33d89572d9c519e89","isMergeCommit":false,"messageTitle":"updated Developer\u0027s Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":55,"deletions":21}}},{"hash":"c235d47ce2aa21b70716cada4e37cc434e015d30","isMergeCommit":false,"messageTitle":"updated developer\u0027s guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":1}}},{"hash":"5c3ae6371909ff03735045d6178edd07b35230f8","isMergeCommit":false,"messageTitle":"added uml diagrams","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":0}}}]},{"date":"2023-10-26","commitResults":[{"hash":"8fd0581bb131c46c9d2c4dcb3c609de4d35d5939","isMergeCommit":false,"messageTitle":"added more find command test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":14},"test-code":{"insertions":51,"deletions":12}}},{"hash":"080c98c29d89a1138a24193e168dfb7768f4f1a8","isMergeCommit":false,"messageTitle":"added more find command test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":16},"test-code":{"insertions":16,"deletions":3}}},{"hash":"14e5eee09b7bd035c3430e7ee741990cfef3a356","isMergeCommit":false,"messageTitle":"changed find command sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":1}}},{"hash":"0a9986d8b0c6ebbd10c964743992b64efdf0ac00","isMergeCommit":false,"messageTitle":"changed sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-28","commitResults":[{"hash":"bc7d8f25061432371b62776859d16689283ed7f8","isMergeCommit":false,"messageTitle":"added new stock level command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":113,"deletions":45},"test-code":{"insertions":5,"deletions":0}}}]},{"date":"2023-10-29","commitResults":[{"hash":"92805b4d14bae7dbb680a8bc830f22ea6cb3eadd","isMergeCommit":false,"messageTitle":"updated UG with stock level command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":8}}},{"hash":"3fa4734a468c6253b0e769b116d0d74e77b3fc9c","isMergeCommit":false,"messageTitle":"added stock level command test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":44,"deletions":0}}},{"hash":"8295f445488c08263a248ab1ab6c753bffdace76","isMergeCommit":false,"messageTitle":"add set threshold quantity","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":93,"deletions":6}}},{"hash":"d7f07141cbb795161500b7f24bcf459d326de38f","isMergeCommit":false,"messageTitle":"updated set threshold command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"15f92bfa2157af06e4ee0fc567597e7207f39e31","isMergeCommit":false,"messageTitle":"updated new set threshold method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":5}}},{"hash":"1d2b93386b284102aaae2d5efbe8395cd05b0194","isMergeCommit":false,"messageTitle":"updated set threshold method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"70c3ba37a5e49c211b5ff7a581de476ac43fe0f3","isMergeCommit":false,"messageTitle":"add new set threshold method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"karishma-t":{"docs":57,"functional-code":18,"test-code":25},"martinschnder":{"docs":52,"functional-code":746,"test-code":87,"other":2},"azfarulmatin":{"docs":47,"functional-code":75,"test-code":15},"TeoHaoZhi":{"docs":500,"functional-code":805,"test-code":86,"other":3},"Barbaracwx":{"docs":239,"functional-code":260,"test-code":146}},"authorContributionVariance":{"karishma-t":286.78458,"martinschnder":20519.947,"azfarulmatin":811.8474,"TeoHaoZhi":16543.656,"Barbaracwx":3407.7598},"authorDisplayNameMap":{"karishma-t":"CS2113-T17-3 KARI..ARAN","martinschnder":"CS2113-T17-3 SCHN..ILLE","azfarulmatin":"CS2113-T17-3 AZFA..ANDI","TeoHaoZhi":"CS2113-T17-3 TEO .. ZHI","Barbaracwx":"CS2113-T17-3 CHON..BARA"}} diff --git a/AY2324S1-CS2113-T17-4_tp_master/authorship.json b/AY2324S1-CS2113-T17-4_tp_master/authorship.json index c449963..6947937 100644 --- a/AY2324S1-CS2113-T17-4_tp_master/authorship.json +++ b/AY2324S1-CS2113-T17-4_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":"SebasFok"},"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: i love 2113 ","lastModifiedDate":"2023-10-05"},{"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":{"SebasFok":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":"rohitcube"},"content":" implementation \u0027com.googlecode.json-simple:json-simple:1.1.1\u0027","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"janelleenqi":1,"rohitcube":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":"SebasFok"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":"|--------------------------------|:-----------------------:|:-----------------------------------------:|:-------------------------------------------------:|","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"| ![](photos/disney_selfie.png) | Sebastian Fok Shin Hung | [Github](https://github.com/SebasFok/) | [Portfolio](team/sebastianfok.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":"| ![](photos/j.png) | Liow Enqi Janelle | [Github](https://github.com/janelleenqi/) | [Portfolio](team/liowenqijanelle.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"SebasFok"},"content":"| ![](photos/rohit_pic.png) | Rohit R | [Github](https://github.com/rohitcube) | [Portfolio](team/johndoe.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"SebasFok"},"content":"| ![](photos/ryanPic.JPG) | Ryan Loh | [Github](https://github.com/ryanlohyr) | [Portfolio](https://ryanlohyr.github.io/ryanloh/) |","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"SebasFok"},"content":"| ![](photos/isaiah_profile.png) | Isaiah Cerven | [Github](https://github.com/CerIsaiah/) | [Portfolio](team/isaiah.md) |","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"SebasFok":7,"-":2}},{"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":"janelleenqi"},"content":"## Design \u0026 implementation, Architecture","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"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":10,"author":{"gitId":"ryanlohyr"},"content":"## Features","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"janelleenqi"},"content":"- Pace","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"- Left","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"SebasFok"},"content":"- Major","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":"# Implementation","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":"## [Proposed] Pacing and MC Calculation","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":"The proposed \"Pacing and MC Calculation\" mechanism is implemented to help users track their academic progress and remaining Modular Credits (MCs) required for graduation. This feature is facilitated by the PacingManager, which stores user data and provides functions for calculating the recommended pacing and remaining MCs. The following operations are available:","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":"- PacingManager#calculateRemainingMCs() — Calculates the remaining MCs required for graduation.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":"- PacingManager#calculateRecommendedPace() — Recommends the pacing for upcoming semesters.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":"These operations are exposed in the Pacing interface as Pacing#calculateRemainingMCs() and Pacing#calculateRecommendedPace() respectively.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":"### Usage Examples","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":"Here are a few examples of how the \"Pacing and MC Calculation\" feature behaves:","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":"#### Example 1: Calculate Remaining MCs","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":"Command: `pace Y2/S1` (assuming that the user has completed 60 MCs from Y1S1 to Y2S1)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":"Response:","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":"`You currently have 100 MCs left until graduation.`","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":"#### Example 2: Calculate Remaining MCs (No Semester Specified)","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":"Command: `pace`","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":"Response:","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":"`You currently have 100 MCs left until graduation.`","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":"## [Proposed] List Modules Left Feature","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":"The proposed left mechanism is implemented to help users keep tracks of modules left for their major. It is facilitated by `modulesLeft`, `modulesMajor` and `modulesTaken`. Additionally, it implements the following operations:","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":"- `modulesLeft#getDifference(modulesMajor, modulesTaken)` – Keeps the list of modules in `modulesMajor` but not in `modulesTaken` in `modulesLeft`.","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":"- `modulesLeft#getMainModuleList()` – Returns the list of modules in `modulesLeft`.","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":"This operation is exposed in the `ModulePlannerController` interface as `ModulePlannerController#listModulesLeft()`.","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":"### Usage Examples","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":"Here are a few examples of how the List Modules Left Feature behaves:","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":"#### Example 1: ","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":"`modulesMajor#getMainModuleList()` gives modules `CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230`.","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":"`modulesTaken#getMainModuleList()` gives modules `CS1231S MA1511`","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":"Command: `left`","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":"Response:","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":"`CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230`","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"SebasFok"},"content":"## [Proposed] Input Major Feature","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"SebasFok"},"content":"The proposed input major feature is facilitated by `Student`. It tries to store the major specified in userInput txt ","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"SebasFok"},"content":"file such that it can be used across sessions. It will print different responses based on whether the storing of the ","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"SebasFok"},"content":"Major was successful. Additionally, it implements the following operation:","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"SebasFok"},"content":"- `Student#setMajor(Major major)` – Saves the selected major in its memory.","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"SebasFok"},"content":"This operation is exposed in the `Student` interface as `Student#updateMajor(String userInput)`.","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"SebasFok"},"content":"### Usage Examples","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"SebasFok"},"content":"Here are a few examples of how the Input Major Feature behaves:","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"SebasFok"},"content":"#### Example 1:","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"SebasFok"},"content":"If \"CS\" is a valid major: `Student#updateMajor(\"major CS\")` calls `Student#setMajor(\"CS\")`, which sets the Major in the ","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"SebasFok"},"content":"student object as `CS` and returns a string `newMajor`","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"SebasFok"},"content":"Command: `major CS`","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"SebasFok"},"content":"Response: `Major CS selected!`","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"SebasFok"},"content":"#### Example 2:","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"SebasFok"},"content":"If \"abc\" is an invalid major: `Student#updateMajor(\"major abc\")` calls `Student#setMajor(\"abc\")`, which generates an","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"SebasFok"},"content":"IllegalArgumentException, which is caught and returns a string `invalidMajor`","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"SebasFok"},"content":"Command: `major abc`","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"SebasFok"},"content":"Response: `Please select a major from this list: [list of currently available Majors]`","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"SebasFok"},"content":"#### Example 3:","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"SebasFok"},"content":"If no major was specified: `Student#updateMajor(\"major\")` returns a string `currentMajor`","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"SebasFok"},"content":"Command: `major`","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"SebasFok"},"content":"Response: `Current major is [current major in student object].`","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":104,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":105,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":109,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":111,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":113,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":115,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":116,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":117,"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":118,"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":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":120,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":122,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":124,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":128,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":130,"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":{"SebasFok":37,"ryanlohyr":20,"janelleenqi":35,"-":38}},{"path":"docs/team/isaiah.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"CerIsaiah"},"content":"# Isaiah - Project Portfolio Page","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"CerIsaiah"},"content":"## Overview","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"CerIsaiah"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"CerIsaiah":6}},{"path":"docs/team/liowenqijanelle.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"janelleenqi"},"content":"# Liow Enqi Janelle - Project Portfolio Page","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"## Overview","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"janelleenqi":6}},{"path":"docs/team/sebastianfok.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"SebasFok"},"content":"# Sebastian Fok - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"SebasFok":6}},{"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":"ryanlohyr"},"content":"import seedu.duke.controllers.ModulePlannerController;","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":" * Main entry-point for the java.duke.Duke application.","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":" //main should have basically no code except start","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" controller.start();","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ryanlohyr":5,"-":8}},{"path":"src/main/java/seedu/duke/controllers/ModulePlannerController.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.controllers;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.CompletePreqs;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.ModuleList;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.schema.Major;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.schema.Student;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.Api;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.views.CommandLineView;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.utils.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.views.ErrorHandler;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"import java.io.InvalidObjectException;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"CerIsaiah"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"CerIsaiah"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":"import static seedu.duke.models.logic.Api.getModulePrereqBasedOnCourse;","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":"public class ModulePlannerController {","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" private CommandLineView view;","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" private Parser parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"SebasFok"},"content":" private Student student;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"janelleenqi"},"content":" private ModuleList modulesMajor;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":" private ModuleList modulesTaken;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" private ModuleList modulesLeft;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"CerIsaiah"},"content":" private HashMap\u003cString, List\u003cString\u003e\u003e modsWithPreqs;","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"CerIsaiah"},"content":" private CompletePreqs addModulePreqs;","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" public ModulePlannerController() {","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" this.view \u003d new CommandLineView();","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"SebasFok"},"content":" this.student \u003d new Student();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"CerIsaiah"},"content":" //This modules list of taken and classes left can be in a storage class later on.","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" this.modulesMajor \u003d new ModuleList(\"CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"CerIsaiah"},"content":" this.modulesTaken \u003d new ModuleList(\"CS1231S MA1511\");","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":" this.modulesLeft \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"CerIsaiah"},"content":" modsWithPreqs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"CerIsaiah"},"content":" //Pass in Hashmap of mods with Preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"CerIsaiah"},"content":" this.addModulePreqs \u003d new CompletePreqs(addModsWithPreqs(modsWithPreqs));","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"CerIsaiah"},"content":" //Pass in the list of mods completed.","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"CerIsaiah"},"content":" addModulePreqs.initializeCompletedMods(modulesTaken);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" * Starts the interactive command-line interface for the academic module management system.","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":" * This method displays a welcome message, reads user input, and processes various commands.","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" * While the user input is not \"bye,\" the method processes the input and responds accordingly.","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" * The commands are case-insensitive, and the response is displayed in the view.","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" public void start() {","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" view.displayWelcome();","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"ryanlohyr"},"content":" String userInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":" while (!userInput.equals(\"bye\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" String[] words \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"CerIsaiah"},"content":" String initialWord \u003d words[0].toLowerCase();","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":" switch (initialWord) {","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" case \"hi\": {","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"can put the commands here\");","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" case \"hello\": {","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"yup\");","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":" case \"info\": {","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"info\");","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"ryanlohyr"},"content":" JSONObject moduleInfoObject \u003d Api.getFullModuleInfo(\"CS2113\");","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"ryanlohyr"},"content":" assert(moduleInfoObject !\u003d null);","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"ryanlohyr"},"content":" String moduleInfo \u003d (String) moduleInfoObject.get(\"description\");","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(moduleInfo);","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"janelleenqi"},"content":" case \"left\": {","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"janelleenqi"},"content":" ArrayList\u003cString\u003e modules \u003d listModulesLeft();","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(\"Modules left:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"janelleenqi"},"content":" for (String module : modules) {","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(module);","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"janelleenqi"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ryanlohyr"},"content":" case \"pace\": {","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"ryanlohyr"},"content":" //assumed that everyone graduates at y4s2","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"ryanlohyr"},"content":" //waiting for retrieving logic","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"ryanlohyr"},"content":" int modulesCreditsCompleted \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"ryanlohyr"},"content":" int totalCreditsToGraduate \u003d 160;","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d totalCreditsToGraduate - modulesCreditsCompleted;","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"ryanlohyr"},"content":" computePace(words, creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"ryanlohyr"},"content":" case \"prereq\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"ryanlohyr"},"content":" if(!Parser.isValidInput(\"prereq\",words)){","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"ryanlohyr"},"content":" ErrorHandler.invalidInput();","lastModifiedDate":"2023-10-28"},{"lineNumber":107,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":108,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":109,"author":{"gitId":"ryanlohyr"},"content":" String keyword \u003d words[1];","lastModifiedDate":"2023-10-28"},{"lineNumber":110,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(getModulePrereqBasedOnCourse(keyword.toUpperCase(), \"CEG\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"SebasFok"},"content":" case \"major\": {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"SebasFok"},"content":" String printMessageCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"SebasFok"},"content":" switch (printMessageCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"SebasFok"},"content":" case \"currentMajor\":","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"SebasFok"},"content":" view.displayMessage(\"Current major is \" + student.getMajor() + \".\");","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"SebasFok"},"content":" case \"newMajor\":","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"SebasFok"},"content":" view.displayMessage(\"Major \" + student.getMajor() + \" selected!\");","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"SebasFok"},"content":" case \"invalidMajor\":","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"SebasFok"},"content":" view.displayMessage(\"Please select a major from this list: \" + Arrays.toString(Major.values()));","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"SebasFok"},"content":" // Empty default branch as printMessageCommand cannot take any other value","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"SebasFok"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"CerIsaiah"},"content":" case \"complete\": {","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"CerIsaiah"},"content":" if (addModulePreqs.checkModInput(words, modulesMajor)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"CerIsaiah"},"content":" String moduleCompleted \u003d words[1];","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"CerIsaiah"},"content":" addModulePreqs.getUnlockedMods(moduleCompleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"CerIsaiah"},"content":" addModulePreqs.printUnlockedMods(moduleCompleted);","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"ryanlohyr"},"content":" default: {","lastModifiedDate":"2023-10-12"},{"lineNumber":141,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"Hello \" + userInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":142,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":143,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":144,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":145,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":146,"author":{"gitId":"ryanlohyr"},"content":" userInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":147,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":148,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":149,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"ryanlohyr"},"content":" * Computes and returns the list of modules that are left in the ModuleList modulesMajor","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"ryanlohyr"},"content":" * after subtracting the modules in the ModuleList modulesTaken.","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":157,"author":{"gitId":"ryanlohyr"},"content":" * @return An ArrayList of module codes representing the modules left after the subtraction.","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"ryanlohyr"},"content":" * @throws InvalidObjectException If either modulesMajor or modulesTaken is null.","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"ryanlohyr"},"content":" public ArrayList\u003cString\u003e listModulesLeft() {","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"ryanlohyr"},"content":" //modulesMajor.txt - modulesTaken.txt","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"ryanlohyr"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"ryanlohyr"},"content":" modulesLeft.getDifference(modulesMajor, modulesTaken);","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"ryanlohyr"},"content":" return modulesLeft.getMainModuleList();","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"ryanlohyr"},"content":" } catch (InvalidObjectException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":166,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":167,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":168,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":169,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":171,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"ryanlohyr"},"content":" * Computes the recommended pace for completing a degree based on the provided academic year","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"ryanlohyr"},"content":" * and credits left until graduation.","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-27"},{"lineNumber":176,"author":{"gitId":"ryanlohyr"},"content":" * @param userInput An array of user input where userInput[0] is the command and userInput[1] is the academic year.","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"ryanlohyr"},"content":" * @param creditsLeft The number of credits left until graduation.","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"ryanlohyr"},"content":" public void computePace(String[] userInput, int creditsLeft) {","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"ryanlohyr"},"content":" boolean argumentProvided \u003d userInput.length !\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"ryanlohyr"},"content":" //wait for text file logic","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"ryanlohyr"},"content":" if (!argumentProvided) {","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"You currently have \" + creditsLeft + \" MCs till graduation\");","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"ryanlohyr"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"ryanlohyr"},"content":" if (!parser.isValidAcademicYear(userInput[1])) {","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"ryanlohyr"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"ryanlohyr"},"content":" String[] parts \u003d userInput[1].split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"ryanlohyr"},"content":" String year \u003d parts[0].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"ryanlohyr"},"content":" String semester \u003d parts[1].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"ryanlohyr"},"content":" int lastSemesterOfYear \u003d 2;","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"ryanlohyr"},"content":" int lastYearOfDegree \u003d 4;","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":198,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":199,"author":{"gitId":"ryanlohyr"},"content":" int yearIntValue \u003d Character.getNumericValue(year.charAt(1));","lastModifiedDate":"2023-10-15"},{"lineNumber":200,"author":{"gitId":"ryanlohyr"},"content":" int semesterIntValue \u003d Character.getNumericValue(semester.charAt(1));","lastModifiedDate":"2023-10-15"},{"lineNumber":201,"author":{"gitId":"ryanlohyr"},"content":" //if we are at y2s1, we have 5 semesters left","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"ryanlohyr"},"content":" int semestersLeft \u003d (lastYearOfDegree - yearIntValue) * 2 + (lastSemesterOfYear - semesterIntValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"ryanlohyr"},"content":" int creditsPerSem \u003d Math.round((float) creditsLeft / semestersLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":204,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"You have \" + creditsLeft + \"MCs for \" + semestersLeft + \" semesters. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":205,"author":{"gitId":"ryanlohyr"},"content":" + \"Recommended Pace: \"+ creditsPerSem + \"MCs per sem until graduation\");","lastModifiedDate":"2023-10-15"},{"lineNumber":206,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":207,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"CerIsaiah"},"content":" * Add all mods that require prerequisites to a map storing the mod and a set of preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"CerIsaiah"},"content":" * @param list","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"CerIsaiah"},"content":" * @return HashMap of Mods with their corresponding preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"CerIsaiah"},"content":" private HashMap\u003cString, List\u003cString\u003e\u003e addModsWithPreqs(HashMap\u003cString, List\u003cString\u003e\u003e list) {","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"CerIsaiah"},"content":" //Only two mods don\u0027t have preqs MA1511 and CS1231S.","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"CerIsaiah"},"content":" // In the future this will be dealt","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS3230\", \"CS2030S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS3230\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2030S\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2040S\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2106\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2109S\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"CerIsaiah"},"content":" return list;","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"CerIsaiah"},"content":" * Helper function to addModsWithPreqs to add Strings and sets together","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"CerIsaiah"},"content":" * @param map","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"CerIsaiah"},"content":" * @param key","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"CerIsaiah"},"content":" * @param value","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"CerIsaiah"},"content":" public static void addValue(HashMap\u003cString, List\u003cString\u003e\u003e map, String key, String value) {","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"CerIsaiah"},"content":" // If the map does not contain the key, put an empty list for that key","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"CerIsaiah"},"content":" if (!map.containsKey(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"CerIsaiah"},"content":" map.put(key, new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"CerIsaiah"},"content":" // Add the value to the list associated with the key","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"CerIsaiah"},"content":" map.get(key).add(value);","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"SebasFok":20,"ryanlohyr":142,"janelleenqi":19,"rohitcube":1,"CerIsaiah":66}},{"path":"src/main/java/seedu/duke/models/logic/Api.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"rohitcube"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"rohitcube"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"rohitcube"},"content":"import java.net.URISyntaxException;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"rohitcube"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"rohitcube"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"rohitcube"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"//import java.util.*;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.parser.JSONParser;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.parser.ParseException;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":"import static seedu.duke.models.logic.DataRepository.getRequirements;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"rohitcube"},"content":"public class Api {","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" * Retrieves the prerequisite tree for a module specified by its code.","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":" * @param moduleCode The code of the module for which prerequisites are to be retrieved.","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" * @return A JSON object representing the prerequisite tree for the module. The prerequisite tree can be in one of","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" * the following formats:","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":" * - If there are no prerequisites, it returns null.","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":" * - If there is a single prerequisite, it returns a JSON object with the key \"or\" containing a list with","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" * the single prerequisite.","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" * - If there are multiple prerequisites, it returns a JSON object representing the full prerequisite tree.","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" private static JSONObject getModulePrereqTree(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" JSONObject fullModuleInfo \u003d getFullModuleInfo(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":" if(fullModuleInfo \u003d\u003d null){","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" //prereqTree can be returned as a string(single pre requisite), null(No pre requisites) or object","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" Object prereqTree \u003d fullModuleInfo.get(\"prereqTree\");","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" if(prereqTree \u003d\u003d null){","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" }else if(prereqTree instanceof String){","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" JSONObject jsonObject \u003d new JSONObject();","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e requirementList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"ryanlohyr"},"content":" requirementList.add((String) prereqTree);","lastModifiedDate":"2023-10-28"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":" jsonObject.put(\"or\", requirementList);","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" return jsonObject;","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" return (JSONObject) fullModuleInfo.get(\"prereqTree\");","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" private static boolean isModuleException(String moduleCode){","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e exemptedModules \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" exemptedModules.add(\"CS1231\");","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" exemptedModules.add(\"MA1508E\");","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" exemptedModules.add(\"EE4204\");","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" return exemptedModules.contains(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" private static ArrayList\u003cString\u003e getExemptedPrerequisite(String moduleCode){","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":" HashMap\u003cString, ArrayList\u003cString\u003e\u003e map \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e list1 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":" list1.add(\"MA1511\");","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" list1.add(\"MA1512\");","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":" map.put(\"CS1231\", list1);","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e list2 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":" list2.add(\"MA1511\");","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" list2.add(\"MA1512\");","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":" map.put(\"MA1508E\", list2);","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e list3 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":" list3.add(\"ST2334\");","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":" map.put(\"EE4204\", list3);","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"ryanlohyr"},"content":" return map.get(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"ryanlohyr"},"content":" public static JSONObject getFullModuleInfo(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"rohitcube"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"rohitcube"},"content":" String url \u003d \"https://api.nusmods.com/v2/2023-2024/modules/\" + moduleCode + \".json\";","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"rohitcube"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"rohitcube"},"content":" HttpRequest request \u003d HttpRequest.newBuilder()","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"rohitcube"},"content":" .uri(new URI(url))","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"rohitcube"},"content":" .GET()","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"rohitcube"},"content":" .build();","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"rohitcube"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"rohitcube"},"content":" String responseBody \u003d response.body();","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"rohitcube"},"content":" JSONParser parser \u003d new JSONParser();","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"rohitcube"},"content":" // Will refactor the variable later on, left it for easier readability","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"ryanlohyr"},"content":" return (JSONObject) parser.parse(responseBody);","lastModifiedDate":"2023-10-28"},{"lineNumber":95,"author":{"gitId":"rohitcube"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"rohitcube"},"content":" //to be replaced with more robust error class in the future","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Invalid Module Name\");","lastModifiedDate":"2023-10-28"},{"lineNumber":98,"author":{"gitId":"rohitcube"},"content":" } catch (IOException | InterruptedException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Invalid Module Name\");","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"rohitcube"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"rohitcube"},"content":" } catch (URISyntaxException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"rohitcube"},"content":" //to be replaced with more robust error class in the future","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"rohitcube"},"content":" System.out.println(\"Sorry, there was an error with\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"rohitcube"},"content":" \" the provided URL: \" + e.getMessage());","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"rohitcube"},"content":" return null;","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"ryanlohyr"},"content":" public static String getModuleInfoDescription(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":110,"author":{"gitId":"ryanlohyr"},"content":" JSONObject fullModuleInfo \u003d getFullModuleInfo(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryanlohyr"},"content":" assert fullModuleInfo !\u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"ryanlohyr"},"content":" return (String) fullModuleInfo.get(\"description\");","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"ryanlohyr"},"content":" public static String getModuleName(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":116,"author":{"gitId":"ryanlohyr"},"content":" JSONObject fullModuleInfo \u003d getFullModuleInfo(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":117,"author":{"gitId":"ryanlohyr"},"content":" assert fullModuleInfo !\u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":118,"author":{"gitId":"ryanlohyr"},"content":" return (String) fullModuleInfo.get(\"title\");","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"ryanlohyr"},"content":" * Recursively flattens and processes a list of module prerequisites.","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"ryanlohyr"},"content":" * @param major The major or program for which prerequisites are being flattened.","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"ryanlohyr"},"content":" * @param prerequisites An ArrayList to store the flattened prerequisites.","lastModifiedDate":"2023-10-28"},{"lineNumber":126,"author":{"gitId":"ryanlohyr"},"content":" * @param modulePrereqArray An ArrayList containing the module prerequisites to be processed.","lastModifiedDate":"2023-10-28"},{"lineNumber":127,"author":{"gitId":"ryanlohyr"},"content":" * @param courseRequirements An ArrayList containing course requirements.","lastModifiedDate":"2023-10-28"},{"lineNumber":128,"author":{"gitId":"ryanlohyr"},"content":" * @param currRequisite The type of the current prerequisite (e.g., \"and\" or \"or\").","lastModifiedDate":"2023-10-28"},{"lineNumber":129,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"ryanlohyr"},"content":" private static void flattenPrereq(","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"ryanlohyr"},"content":" String major,","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e prerequisites,","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cObjects\u003e modulePrereqArray,","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e courseRequirements,","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"ryanlohyr"},"content":" String currRequisite) {","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"ryanlohyr"},"content":" //base case","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"ryanlohyr"},"content":" for(Object module: modulePrereqArray){","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"ryanlohyr"},"content":" if(module instanceof String){","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"ryanlohyr"},"content":" String formattedModule \u003d ((String) module).replace(\":D\", \"\");","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"ryanlohyr"},"content":" formattedModule \u003d formattedModule.replace(\"%\",\"\");","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"ryanlohyr"},"content":" if(courseRequirements.contains(formattedModule) ){","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"ryanlohyr"},"content":" prerequisites.add(formattedModule);","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"ryanlohyr"},"content":" if(currRequisite.equals(\"or\")){","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"ryanlohyr"},"content":" return;","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"ryanlohyr"},"content":" }else{","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"ryanlohyr"},"content":" //item is an object","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"ryanlohyr"},"content":" //here, we determine if its \u0027or\u0027 or \u0027and\u0027","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"ryanlohyr"},"content":" JSONObject moduleJSON \u003d (JSONObject) module;","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"ryanlohyr"},"content":" String key \u003d (String) moduleJSON.keySet().toArray()[0];","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cObjects\u003e initial \u003d (ArrayList\u003cObjects\u003e) moduleJSON.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"ryanlohyr"},"content":" flattenPrereq(major, prerequisites, initial, getRequirements(major), key);","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"ryanlohyr"},"content":" * Retrieves the prerequisite array for a module specified by its code and also taking into account the degree","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"ryanlohyr"},"content":" * requirements of the course.","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"ryanlohyr"},"content":" * @param moduleCode The code of the module for which prerequisites are to be retrieved.","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"ryanlohyr"},"content":" * @return A JSONObject representing the prerequisite tree for the module,","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"ryanlohyr"},"content":" * or NULL if no prerequisites are specified.","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"ryanlohyr"},"content":" public static ArrayList\u003cString\u003e getModulePrereqBasedOnCourse(String moduleCode, String major) {","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"ryanlohyr"},"content":" // Only accepts CEG requirements now","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"ryanlohyr"},"content":" if(!Objects.equals(major, \"CEG\")){","lastModifiedDate":"2023-10-28"},{"lineNumber":173,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":174,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":175,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":176,"author":{"gitId":"ryanlohyr"},"content":" //Modules that has prerequisites incorrectly identified by NUSMods","lastModifiedDate":"2023-10-28"},{"lineNumber":177,"author":{"gitId":"ryanlohyr"},"content":" if(isModuleException(moduleCode)){","lastModifiedDate":"2023-10-28"},{"lineNumber":178,"author":{"gitId":"ryanlohyr"},"content":" return getExemptedPrerequisite(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":179,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":180,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":181,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e prerequisites \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":182,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":183,"author":{"gitId":"ryanlohyr"},"content":" JSONObject modulePrereqTree \u003d getModulePrereqTree(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":184,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":185,"author":{"gitId":"ryanlohyr"},"content":" if(modulePrereqTree \u003d\u003d null){","lastModifiedDate":"2023-10-28"},{"lineNumber":186,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":187,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":188,"author":{"gitId":"ryanlohyr"},"content":" String key \u003d (String) modulePrereqTree.keySet().toArray()[0];","lastModifiedDate":"2023-10-28"},{"lineNumber":189,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":190,"author":{"gitId":"ryanlohyr"},"content":" //settle this warning","lastModifiedDate":"2023-10-28"},{"lineNumber":191,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cObjects\u003e initial \u003d (ArrayList\u003cObjects\u003e) modulePrereqTree.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":192,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":193,"author":{"gitId":"ryanlohyr"},"content":" flattenPrereq(major, prerequisites, initial, getRequirements(major), key);","lastModifiedDate":"2023-10-28"},{"lineNumber":194,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":195,"author":{"gitId":"ryanlohyr"},"content":" return prerequisites;","lastModifiedDate":"2023-10-28"},{"lineNumber":196,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":197,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":200,"author":{"gitId":"rohitcube"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryanlohyr":153,"rohitcube":47}},{"path":"src/main/java/seedu/duke/models/logic/CompletePreqs.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"CerIsaiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"CerIsaiah"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"CerIsaiah"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"CerIsaiah"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"CerIsaiah"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"CerIsaiah"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"CerIsaiah"},"content":" * CompletePreqs checks which mods are unlocked once you finish a specific module","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"CerIsaiah"},"content":"public class CompletePreqs {","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"CerIsaiah"},"content":" //Full list of mods with modulesWithPreqs","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"CerIsaiah"},"content":" private HashMap\u003cString, List\u003cString\u003e\u003e modulesWithPreqs;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"CerIsaiah"},"content":" private ArrayList\u003cString\u003e addToModulesCompleted;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"CerIsaiah"},"content":" // To track modules that are already unlocked","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"CerIsaiah"},"content":" private Set\u003cString\u003e unlockedModulesSet;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"CerIsaiah"},"content":" public CompletePreqs(HashMap\u003cString, List\u003cString\u003e\u003e inputMods) {","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"CerIsaiah"},"content":" modulesWithPreqs \u003d new HashMap\u003c\u003e(inputMods);","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"CerIsaiah"},"content":" unlockedModulesSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"CerIsaiah"},"content":" addToModulesCompleted \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"CerIsaiah"},"content":" * Create a list of completed mods, hardcoded from startup.","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"CerIsaiah"},"content":" * @param list","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"CerIsaiah"},"content":" public void initializeCompletedMods(ModuleList list) {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"CerIsaiah"},"content":" addToModulesCompleted.addAll(list.getMainModuleList());","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"CerIsaiah"},"content":" for (String mod : addToModulesCompleted) {","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"CerIsaiah"},"content":" processModuleForUnlockingWithoutPrint(mod);","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"CerIsaiah"},"content":" * Prints what mods have been unlocked after input","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"CerIsaiah"},"content":" * @param moduleCompleted","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"CerIsaiah"},"content":" public void getUnlockedMods(String moduleCompleted) {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"CerIsaiah"},"content":" // Check prerequisites of the moduleCompleted","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"CerIsaiah"},"content":" if (modulesWithPreqs.containsKey(moduleCompleted)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"CerIsaiah"},"content":" List\u003cString\u003e unmetPrerequisites \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"CerIsaiah"},"content":" for (String preq : modulesWithPreqs.get(moduleCompleted)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(preq)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"CerIsaiah"},"content":" unmetPrerequisites.add(preq);","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"CerIsaiah"},"content":" //Stops if a completedMod shouldn\u0027t be able to be completed with proper preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"CerIsaiah"},"content":" if (!unmetPrerequisites.isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(moduleCompleted +","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" \" cannot be marked as completed because of uncompleted prerequisites: \"","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" + unmetPrerequisites);","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"CerIsaiah"},"content":" return;","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"CerIsaiah"},"content":" //If its not marked as completed, properly add it to the list","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(moduleCompleted)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"CerIsaiah"},"content":" addToModulesCompleted.add(moduleCompleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(\"Mod completed: \" + moduleCompleted);","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"CerIsaiah"},"content":" printUnlockedMods(moduleCompleted);","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"CerIsaiah"},"content":" * This is only used for the first initalization of the mods.","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"CerIsaiah"},"content":" * @param moduleCompleted","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" private void processModuleForUnlockingWithoutPrint(String moduleCompleted) {","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"CerIsaiah"},"content":" ArrayList\u003cString\u003e newMods \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"CerIsaiah"},"content":" for (String key : modulesWithPreqs.keySet()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"CerIsaiah"},"content":" //If new unlocked mod isn\u0027t marked as complete or unlocked already","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"CerIsaiah"},"content":" if (!unlockedModulesSet.contains(key) \u0026\u0026 !addToModulesCompleted.contains(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"CerIsaiah"},"content":" boolean allPrerequisitesMet \u003d true;","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"CerIsaiah"},"content":" for (String preq : modulesWithPreqs.get(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(preq)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"CerIsaiah"},"content":" //Make sure preq isn\u0027t already marked as done","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"CerIsaiah"},"content":" allPrerequisitesMet \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"CerIsaiah"},"content":" if (allPrerequisitesMet) {","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"CerIsaiah"},"content":" newMods.add(key);","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"CerIsaiah"},"content":" unlockedModulesSet.add(key);","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"CerIsaiah"},"content":" * @param moduleCompleted","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"CerIsaiah"},"content":" public void printUnlockedMods(String moduleCompleted) {","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"CerIsaiah"},"content":" ArrayList\u003cString\u003e newlyUnlockedMods \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"CerIsaiah"},"content":" for (String key : modulesWithPreqs.keySet()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"CerIsaiah"},"content":" //If new unlocked mod isn\u0027t marked as complete or unlocked already","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"CerIsaiah"},"content":" if (!unlockedModulesSet.contains(key) \u0026\u0026 !addToModulesCompleted.contains(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"CerIsaiah"},"content":" boolean allPrerequisitesMet \u003d true;","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"CerIsaiah"},"content":" for (String preq : modulesWithPreqs.get(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(preq)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"CerIsaiah"},"content":" //Make sure preq isn\u0027t already marked as done","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"CerIsaiah"},"content":" allPrerequisitesMet \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"CerIsaiah"},"content":" if (allPrerequisitesMet) {","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"CerIsaiah"},"content":" newlyUnlockedMods.add(key);","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"CerIsaiah"},"content":" unlockedModulesSet.add(key);","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"CerIsaiah"},"content":" for (String mod : newlyUnlockedMods) {","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(mod + \" has been unlocked!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"CerIsaiah"},"content":" public void printModsCompleted(){","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"CerIsaiah"},"content":" for (String mod: addToModulesCompleted){","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(mod + \"has been completed\");","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"CerIsaiah"},"content":" public boolean checkModInput(String[] words, ModuleList list){","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"CerIsaiah"},"content":" if (words.length \u003d\u003d 2){","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"CerIsaiah"},"content":" if (list.getMainModuleList().contains(words[1])){","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"CerIsaiah"},"content":" return true;","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(\"Please enter a available mod: \");","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"CerIsaiah"},"content":" list.printMainModuleList();","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"CerIsaiah"},"content":" return false;","lastModifiedDate":"2023-10-25"},{"lineNumber":142,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(\"Please enter a available mod after the complete keyword\");","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"CerIsaiah"},"content":" list.printMainModuleList();","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"CerIsaiah"},"content":" return false;","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"CerIsaiah"},"content":"}","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"ryanlohyr":7,"CerIsaiah":142}},{"path":"src/main/java/seedu/duke/models/logic/DataRepository.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"import java.io.File;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"public class DataRepository {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" public static ArrayList\u003cString\u003e getRequirements(String major){","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" try{","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" //add validation if wrong major?","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":" String fileName \u003d String.format(\"src/main/java/seedu/duke/models/data/%sRequirements\",major);","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":" File f \u003d new File(fileName);","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"ryanlohyr"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"File does not exist\");","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e currentArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" String currentLine \u003d s.nextLine();","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" currentArray.add(currentLine);","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" return currentArray;","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":" }catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":31}},{"path":"src/main/java/seedu/duke/models/logic/ModuleList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"import java.io.InvalidObjectException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"public class ModuleList {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":" private ArrayList\u003cString\u003e mainModuleList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"janelleenqi"},"content":" private int numberOfModules;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"janelleenqi"},"content":" public ModuleList(String modules) {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":" String[] moduleArray \u003d modules.split(\" \");","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":" mainModuleList \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":" numberOfModules \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":" for (String module : moduleArray) {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":" mainModuleList.add(module);","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"janelleenqi"},"content":" numberOfModules +\u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"janelleenqi"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"janelleenqi"},"content":" new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"janelleenqi"},"content":" public ModuleList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":" mainModuleList \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" numberOfModules \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"janelleenqi"},"content":" * Computes the difference between two ModuleList objects (A - B) and updates the current list.","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" * @param a The first ModuleList.","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" * @param b The second ModuleList.","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"janelleenqi"},"content":" * @throws InvalidObjectException If either A or B is null.","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":" public void getDifference (ModuleList a, ModuleList b) throws InvalidObjectException {","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":" //A - B","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" if (a \u003d\u003d null || b \u003d\u003d null) {","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"janelleenqi"},"content":" throw new InvalidObjectException(\"Null Inputs\");","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":" mainModuleList.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" for (String moduleA : a.mainModuleList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":" if (!b.exists(moduleA)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":" mainModuleList.add(moduleA);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":" numberOfModules +\u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":" } catch (InvalidObjectException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":" System.out.println(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":" * Checks if a module exists in the list.","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":" * @param moduleA The module to check for existence.","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":" * @return true if the module exists in the list; false otherwise.","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":" * @throws InvalidObjectException If moduleA is null.","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":" public boolean exists(String moduleA) throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"janelleenqi"},"content":" if (moduleA \u003d\u003d null || mainModuleList \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"janelleenqi"},"content":" throw new InvalidObjectException(\"Null Inputs\");","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"janelleenqi"},"content":" for (String moduleB : mainModuleList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"janelleenqi"},"content":" if (moduleA.equals(moduleB)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"janelleenqi"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"janelleenqi"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"janelleenqi"},"content":" * Retrieves the list of modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"janelleenqi"},"content":" * @return The ArrayList containing the modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"janelleenqi"},"content":" public ArrayList\u003cString\u003e getMainModuleList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"janelleenqi"},"content":" assert mainModuleList !\u003d null: \"null mainModuleList\";","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"janelleenqi"},"content":" return mainModuleList;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"CerIsaiah"},"content":" public void printMainModuleList(){","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"CerIsaiah"},"content":" for (String mod: mainModuleList){","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"CerIsaiah"},"content":" System.out.print(mod + \" \");","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"CerIsaiah"},"content":" System.out.println();","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"janelleenqi"},"content":" * Retrieves the number of modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" * @return The number of modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":" public int getNumberOfModules() {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":" assert numberOfModules \u003e\u003d 0: \"negative numberOfModules\";","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":" return numberOfModules;","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":107,"author":{"gitId":"janelleenqi"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ryanlohyr":9,"janelleenqi":91,"CerIsaiah":7}},{"path":"src/main/java/seedu/duke/models/logic/ScheduleGenerator.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class ScheduleGenerator {","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":" //we need to create a requisite sorter","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":7}},{"path":"src/main/java/seedu/duke/models/schema/Major.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.schema;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"public enum Major {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":" CS, CEG","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"SebasFok":4,"ryanlohyr":1}},{"path":"src/main/java/seedu/duke/models/schema/Module.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.schema;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"public class Module {","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":" //defining your module object etc","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ryanlohyr":4}},{"path":"src/main/java/seedu/duke/models/schema/Student.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.schema;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"public class Student {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":" private String name;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":" private Major major;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"SebasFok"},"content":" public Student(String name, Major major) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"SebasFok"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"SebasFok"},"content":" this.major \u003d major;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"SebasFok"},"content":" public Student() {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"SebasFok"},"content":" this.name \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"SebasFok"},"content":" this.major \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"SebasFok"},"content":" public String getName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"SebasFok"},"content":" return name;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"SebasFok"},"content":" public Major getMajor() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"SebasFok"},"content":" return major;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"SebasFok"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"SebasFok"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"SebasFok"},"content":" public void setMajor(Major major) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"SebasFok"},"content":" this.major \u003d major;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"SebasFok"},"content":" public String updateMajor(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"SebasFok"},"content":" String[] words \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"SebasFok"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"SebasFok"},"content":" return \"currentMajor\";","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"SebasFok"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"SebasFok"},"content":" setMajor(Major.valueOf(words[1].toUpperCase()));","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"SebasFok"},"content":" return \"newMajor\";","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"SebasFok"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"SebasFok"},"content":" return \"invalidMajor\";","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"SebasFok"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"SebasFok":45,"ryanlohyr":1}},{"path":"src/main/java/seedu/duke/utils/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class Parser {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":" * Checks if the given academic year input is valid.","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":" * The academic year should be in the format \"Yn/Sx\", where \u0027n\u0027 represents the year","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":" * and \u0027x\u0027 represents the semester (e.g., Y1/S1, Y2/S2).","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" * @author @ryanlohyr","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" * @param userInput The academic year input to be validated.","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":" * @return true if the input is a valid academic year, false otherwise.","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"ryanlohyr"},"content":" * @throws IllegalArgumentException if the input format is incorrect or if the year or semester is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":" public boolean isValidAcademicYear( String userInput ) {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":" String[] parts \u003d userInput.split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":" if(parts.length !\u003d 2){","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Needs to be in format of Y2/S1\");","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" String year \u003d parts[0].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" String semester \u003d parts[1].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" //last year","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" if(year.equals(\"Y4\") \u0026\u0026 semester.equals(\"S2\")){","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Its your last sem!! A bit too late ya....\");","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" //validate semester","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" if(!semester.equals(\"S1\") \u0026\u0026 !semester.equals(\"S2\")){","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Invalid Semester\");","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":" //validate year","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"ryanlohyr"},"content":" if (!(year.equals(\"Y1\") || year.equals(\"Y2\") || year.equals(\"Y3\") || year.equals(\"Y4\"))) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":" // The input is not \"Y1,\" \"Y2,\" \"Y3,\" or \"Y4\"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Invalid Year\");","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" return true;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"ryanlohyr"},"content":" public static boolean isValidInput(String command, String[] words) {","lastModifiedDate":"2023-10-28"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" switch (command) {","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"ryanlohyr"},"content":" case \"prereq\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":51,"author":{"gitId":"ryanlohyr"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" case \"test\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" if (words.length \u003c 23) {","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":" case \"test2\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" if (words.length \u003c 21) {","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":" default: {","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":" return true;","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":" return true;","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ryanlohyr":78}},{"path":"src/main/java/seedu/duke/views/CommandLineView.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.views;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class CommandLineView {","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":" public void displayWelcome(){","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"What is your name?\");","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ryanlohyr":18}},{"path":"src/main/java/seedu/duke/views/ErrorHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.views;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class ErrorHandler {","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":" public static void invalidInput(){","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Invalid Input provided\");","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":7}},{"path":"src/main/java/seedu/duke/views/ModuleInfo.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"rohitcube"},"content":"package seedu.duke.views;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"rohitcube"},"content":"public class ModuleInfo {","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"rohitcube"},"content":" public static void printModule(JSONObject module) {","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"rohitcube"},"content":" System.out.println(module);","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"rohitcube"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"rohitcube":10}},{"path":"src/test/java/seedu/duke/ModuleListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"janelleenqi"},"content":"package seedu.duke;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.ModuleList;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"import java.io.InvalidObjectException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":"class ModuleListTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":" //success scenario 1: 2 ModuleList --\u003e difference","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":" void getDifferenceTest_twoModuleList_expectDifference() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":" ModuleList first \u003d new ModuleList(\"CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"janelleenqi"},"content":" ModuleList second \u003d new ModuleList(\"CS1231S CS2030S CS2040S MA1511\");","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"janelleenqi"},"content":" ModuleList difference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"janelleenqi"},"content":" ModuleList actualDifference \u003d new ModuleList(\"CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"janelleenqi"},"content":" difference.getDifference(first, second);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"janelleenqi"},"content":" int numberOfModules \u003d difference.getNumberOfModules();","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" for (int i \u003d 0; i \u003c numberOfModules; i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"janelleenqi"},"content":" assertEquals(difference.getMainModuleList().get(i), actualDifference.getMainModuleList().get(i));","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"janelleenqi"},"content":" //success scenario 2: 1 empty ModuleList, 1 ModuleList --\u003e difference which is empty","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"janelleenqi"},"content":" void getDifferenceTest_oneEmptyModuleListAnotherModuleList_expectEmptyDifference() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":" ModuleList first \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"janelleenqi"},"content":" ModuleList second \u003d new ModuleList(\"CS1231S CS2030S CS2040S MA1511\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" ModuleList difference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"janelleenqi"},"content":" ModuleList actualDifference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"janelleenqi"},"content":" difference.getDifference(first, second);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":" int numberOfModules \u003d difference.getNumberOfModules();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"janelleenqi"},"content":" for (int i \u003d 0; i \u003c numberOfModules; i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":" assertEquals(difference.getMainModuleList().get(i), actualDifference.getMainModuleList().get(i));","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":" //failure scenario 1: null ModuleList input --\u003e throw exception","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":" void getDifferenceTest_nullModuleListInput_expectException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":" ModuleList first \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":" ModuleList second \u003d new ModuleList(\"CS1231S CS2030S CS2040S MA1511\");","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":" ModuleList difference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":" assertThrows(InvalidObjectException.class, () -\u003e difference.getDifference(first, second));","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":" //success scenario 1: 1 input String, 1 ModuleList that contains input String --\u003e true","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":" void existsTest_moduleListContainsModule_expectTrue() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d \"CS1231S\";","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList(\"CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"janelleenqi"},"content":" boolean result \u003d ml.exists(inputString);","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"janelleenqi"},"content":" assertTrue(result);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"janelleenqi"},"content":" //success scenario 2: 1 input String, 1 ModuleList that does not contain input String --\u003e false","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"janelleenqi"},"content":" void existsTest_moduleListDoesNotContainModule_expectFalse() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d \"CS1231S\";","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList(\"CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"janelleenqi"},"content":" boolean result \u003d ml.exists(inputString);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"janelleenqi"},"content":" assertFalse(result);","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"janelleenqi"},"content":" //failure scenario 1: input null string, 1 ModuleList --\u003e throw exception","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"janelleenqi"},"content":" void existsTest_nullInput_expectException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList(\"CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"janelleenqi"},"content":" assertThrows(InvalidObjectException.class, () -\u003e ml.exists(inputString));","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"janelleenqi"},"content":" //success scenario 3: input string, 1 empty ModuleList --\u003e false","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"janelleenqi"},"content":" void existsTest_nullMainModuleList_expectException() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d \"CS1231S\";","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" boolean result \u003d ml.exists(inputString);","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":" assertFalse(result);","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ryanlohyr":1,"janelleenqi":102}},{"path":"src/test/java/seedu/duke/controllers/ModulePlannerControllerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.controllers;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.ModuleList;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.DataRepository;","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":"class ModulePlannerControllerTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":" private final ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" @AfterEach","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" void computePaceWithoutArgument() {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(String.format(\"You currently have %s MCs till graduation\",creditsLeft), printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" void computePaceInvalidArgument() {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y2s1\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Needs to be in format of Y2/S1\", printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" void test() throws FileNotFoundException {","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"testttt\");","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(DataRepository.getRequirements(\"CEG\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Needs to be in format of Y2/S1\", \"Needs to be in format of Y2/S1\");","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" void computePaceInvalidSemester() {","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y2/s10\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Invalid Semester\", printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":" void computePaceInvalidYear() {","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y20/s1\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Invalid Year\", printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"ryanlohyr"},"content":" void computePaceValidYear() {","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y2/s1\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"ryanlohyr"},"content":" String test \u003d \"hi\";","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"ryanlohyr"},"content":" String line \u003d \"You have 60MCs for 5 semesters. Recommended Pace: 12MCs per sem until graduation\";","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(printedOutput, line);","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" //success scenario: difference","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":" void listModulesLeftTest_expectArrayList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"CerIsaiah"},"content":" ModuleList actualDifference \u003d new ModuleList(\"CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-19"},{"lineNumber":105,"author":{"gitId":"janelleenqi"},"content":" ArrayList\u003cString\u003e list \u003d controller.listModulesLeft();","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"janelleenqi"},"content":" int numberOfModules \u003d actualDifference.getNumberOfModules();","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"janelleenqi"},"content":" for (int i \u003d 0; i \u003c numberOfModules; i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"janelleenqi"},"content":" assertEquals(actualDifference.getMainModuleList().get(i), list.get(i));","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"SebasFok":1,"ryanlohyr":95,"janelleenqi":17,"CerIsaiah":1}},{"path":"src/test/java/seedu/duke/models/StudentTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"SebasFok"},"content":"package seedu.duke.models;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.schema.Student;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"SebasFok"},"content":"public class StudentTest {","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"SebasFok"},"content":" //success scenario: valid major -\u003e major updated","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"SebasFok"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"SebasFok"},"content":" void updateMajorTest_validMajor_expectNewMajorMessage() {","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"SebasFok"},"content":" Student student \u003d new Student();","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"SebasFok"},"content":" String userInput \u003d \"major cs\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"SebasFok"},"content":" String printedOutputCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"SebasFok"},"content":" assertEquals(\"newMajor\", printedOutputCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"SebasFok"},"content":" //success scenario: no major -\u003e return current major","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"SebasFok"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"SebasFok"},"content":" void updateMajorTest_noMajor_expectCurrentMajorMessage() {","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"SebasFok"},"content":" Student student \u003d new Student();","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"SebasFok"},"content":" String userInput \u003d \"major\";","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"SebasFok"},"content":" String printedOutputCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"SebasFok"},"content":" assertEquals(\"currentMajor\", printedOutputCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"SebasFok"},"content":" //failure scenario invalid major -\u003e throw exception","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"SebasFok"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"SebasFok"},"content":" void updateMajorTest_invalidMajor_expectFailureMessage() {","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"SebasFok"},"content":" Student student \u003d new Student();","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"SebasFok"},"content":" String userInput \u003d \"major abc\";","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"SebasFok"},"content":" String printedOutputCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"SebasFok"},"content":" assertEquals(\"invalidMajor\", printedOutputCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"SebasFok"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"SebasFok":34,"ryanlohyr":1}},{"path":"src/test/java/seedu/duke/models/logic/DataRepositoryTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"class DataRepositoryTest {","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" void validRequirementsReturned() {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e cegRequirementArray \u003d DataRepository.getRequirements(\"CEG\");","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" assert(!cegRequirementArray.isEmpty());","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":13}}] +[{"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":"SebasFok"},"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: i love 2113 ","lastModifiedDate":"2023-10-05"},{"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":{"SebasFok":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":"rohitcube"},"content":" implementation \u0027com.googlecode.json-simple:json-simple:1.1.1\u0027","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"janelleenqi":1,"rohitcube":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":"SebasFok"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":"|--------------------------------|:-----------------------:|:-----------------------------------------:|:-------------------------------------------------:|","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"| ![](photos/disney_selfie.png) | Sebastian Fok Shin Hung | [Github](https://github.com/SebasFok/) | [Portfolio](team/sebastianfok.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":"| ![](photos/j.png) | Liow Enqi Janelle | [Github](https://github.com/janelleenqi/) | [Portfolio](team/liowenqijanelle.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"SebasFok"},"content":"| ![](photos/rohit_pic.png) | Rohit R | [Github](https://github.com/rohitcube) | [Portfolio](team/johndoe.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"SebasFok"},"content":"| ![](photos/ryanPic.JPG) | Ryan Loh | [Github](https://github.com/ryanlohyr) | [Portfolio](https://ryanlohyr.github.io/ryanloh/) |","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"SebasFok"},"content":"| ![](photos/isaiah_profile.png) | Isaiah Cerven | [Github](https://github.com/CerIsaiah/) | [Portfolio](team/isaiah.md) |","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"SebasFok":7,"-":2}},{"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":"janelleenqi"},"content":"## Design \u0026 implementation, Architecture","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"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":10,"author":{"gitId":"ryanlohyr"},"content":"## Features","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"janelleenqi"},"content":"- Pace","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"- Left","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"SebasFok"},"content":"- Major","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":"# Implementation","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":"## [Proposed] Pacing and MC Calculation","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":"The proposed \"Pacing and MC Calculation\" mechanism is implemented to help users track their academic progress and remaining Modular Credits (MCs) required for graduation. This feature is facilitated by the PacingManager, which stores user data and provides functions for calculating the recommended pacing and remaining MCs. The following operations are available:","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":"- PacingManager#calculateRemainingMCs() — Calculates the remaining MCs required for graduation.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":"- PacingManager#calculateRecommendedPace() — Recommends the pacing for upcoming semesters.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":"These operations are exposed in the Pacing interface as Pacing#calculateRemainingMCs() and Pacing#calculateRecommendedPace() respectively.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":"### Usage Examples","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":"Here are a few examples of how the \"Pacing and MC Calculation\" feature behaves:","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":"#### Example 1: Calculate Remaining MCs","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":"Command: `pace Y2/S1` (assuming that the user has completed 60 MCs from Y1S1 to Y2S1)","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":"Response:","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":"`You currently have 100 MCs left until graduation.`","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":"#### Example 2: Calculate Remaining MCs (No Semester Specified)","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":"Command: `pace`","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":"Response:","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":"`You currently have 100 MCs left until graduation.`","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":"## [Proposed] List Modules Left Feature","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":"The proposed left mechanism is implemented to help users keep tracks of modules left for their major. It is facilitated by `modulesLeft`, `modulesMajor` and `modulesTaken`. Additionally, it implements the following operations:","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":"- `modulesLeft#getDifference(modulesMajor, modulesTaken)` – Keeps the list of modules in `modulesMajor` but not in `modulesTaken` in `modulesLeft`.","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":"- `modulesLeft#getMainModuleList()` – Returns the list of modules in `modulesLeft`.","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":"This operation is exposed in the `ModulePlannerController` interface as `ModulePlannerController#listModulesLeft()`.","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":"### Usage Examples","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":"Here are a few examples of how the List Modules Left Feature behaves:","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":"#### Example 1: ","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":"`modulesMajor#getMainModuleList()` gives modules `CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230`.","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":"`modulesTaken#getMainModuleList()` gives modules `CS1231S MA1511`","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":"Command: `left`","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":"Response:","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":"`CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230`","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"SebasFok"},"content":"## [Proposed] Input Major Feature","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"SebasFok"},"content":"The proposed input major feature is facilitated by `Student`. It tries to store the major specified in userInput txt ","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"SebasFok"},"content":"file such that it can be used across sessions. It will print different responses based on whether the storing of the ","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"SebasFok"},"content":"Major was successful. Additionally, it implements the following operation:","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"SebasFok"},"content":"- `Student#setMajor(Major major)` – Saves the selected major in its memory.","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"SebasFok"},"content":"This operation is exposed in the `Student` interface as `Student#updateMajor(String userInput)`.","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"SebasFok"},"content":"### Usage Examples","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"SebasFok"},"content":"Here are a few examples of how the Input Major Feature behaves:","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"SebasFok"},"content":"#### Example 1:","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"SebasFok"},"content":"If \"CS\" is a valid major: `Student#updateMajor(\"major CS\")` calls `Student#setMajor(\"CS\")`, which sets the Major in the ","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"SebasFok"},"content":"student object as `CS` and returns a string `newMajor`","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"SebasFok"},"content":"Command: `major CS`","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"SebasFok"},"content":"Response: `Major CS selected!`","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"SebasFok"},"content":"#### Example 2:","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"SebasFok"},"content":"If \"abc\" is an invalid major: `Student#updateMajor(\"major abc\")` calls `Student#setMajor(\"abc\")`, which generates an","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"SebasFok"},"content":"IllegalArgumentException, which is caught and returns a string `invalidMajor`","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"SebasFok"},"content":"Command: `major abc`","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"SebasFok"},"content":"Response: `Please select a major from this list: [list of currently available Majors]`","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"SebasFok"},"content":"#### Example 3:","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"SebasFok"},"content":"If no major was specified: `Student#updateMajor(\"major\")` returns a string `currentMajor`","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"SebasFok"},"content":"Command: `major`","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"SebasFok"},"content":"Response: `Current major is [current major in student object].`","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":104,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":105,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":109,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":111,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":113,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":115,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":116,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":117,"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":118,"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":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":120,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":122,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":124,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":128,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":130,"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":{"SebasFok":37,"ryanlohyr":20,"janelleenqi":35,"-":38}},{"path":"docs/team/isaiah.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"CerIsaiah"},"content":"# Isaiah - Project Portfolio Page","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"CerIsaiah"},"content":"## Overview","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"CerIsaiah"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"CerIsaiah":6}},{"path":"docs/team/liowenqijanelle.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"janelleenqi"},"content":"# Liow Enqi Janelle - Project Portfolio Page","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"## Overview","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"janelleenqi":6}},{"path":"docs/team/sebastianfok.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"SebasFok"},"content":"# Sebastian Fok - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"SebasFok":6}},{"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":"ryanlohyr"},"content":"import seedu.duke.controllers.ModulePlannerController;","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":" * Main entry-point for the java.duke.Duke application.","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":" //main should have basically no code except start","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" controller.start();","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ryanlohyr":5,"-":8}},{"path":"src/main/java/seedu/duke/controllers/ModulePlannerController.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.controllers;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.CompletePreqs;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"import seedu.duke.models.logic.DataRepository;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.ModuleList;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.schema.Major;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.schema.Student;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.Api;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.views.CommandLineView;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.utils.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.views.ErrorHandler;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":"import java.io.InvalidObjectException;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"CerIsaiah"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"CerIsaiah"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":"import static seedu.duke.models.logic.Api.getModulePrereqBasedOnCourse;","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":"public class ModulePlannerController {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" private CommandLineView view;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" private Parser parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"SebasFok"},"content":" private Student student;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" private ModuleList modulesMajor;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"janelleenqi"},"content":" private ModuleList modulesTaken;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"janelleenqi"},"content":" private ModuleList modulesLeft;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"CerIsaiah"},"content":" private HashMap\u003cString, List\u003cString\u003e\u003e modsWithPreqs;","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"CerIsaiah"},"content":" private CompletePreqs addModulePreqs;","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" public ModulePlannerController() {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" this.view \u003d new CommandLineView();","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"SebasFok"},"content":" this.student \u003d new Student();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"CerIsaiah"},"content":" //This modules list of taken and classes left can be in a storage class later on.","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":" this.modulesMajor \u003d new ModuleList(\"CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"CerIsaiah"},"content":" this.modulesTaken \u003d new ModuleList(\"CS1231S MA1511\");","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"janelleenqi"},"content":" this.modulesLeft \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"CerIsaiah"},"content":" modsWithPreqs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"CerIsaiah"},"content":" //Pass in Hashmap of mods with Preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"CerIsaiah"},"content":" this.addModulePreqs \u003d new CompletePreqs(addModsWithPreqs(modsWithPreqs));","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"CerIsaiah"},"content":" //Pass in the list of mods completed.","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"CerIsaiah"},"content":" addModulePreqs.initializeCompletedMods(modulesTaken);","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" * Starts the interactive command-line interface for the academic module management system.","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" * This method displays a welcome message, reads user input, and processes various commands.","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" * While the user input is not \"bye,\" the method processes the input and responds accordingly.","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" * The commands are case-insensitive, and the response is displayed in the view.","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" public void start() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"ryanlohyr"},"content":" view.displayWelcome();","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":" Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" String userInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":" while (!userInput.equals(\"bye\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" String[] words \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"CerIsaiah"},"content":" String initialWord \u003d words[0].toLowerCase();","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":" switch (initialWord) {","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" case \"hi\": {","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"can put the commands here\");","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":" case \"hello\": {","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"yup\");","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"ryanlohyr"},"content":" case \"info\": {","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"info\");","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"ryanlohyr"},"content":" JSONObject moduleInfoObject \u003d Api.getFullModuleInfo(\"CS2113\");","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"ryanlohyr"},"content":" assert(moduleInfoObject !\u003d null);","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"ryanlohyr"},"content":" String moduleInfo \u003d (String) moduleInfoObject.get(\"description\");","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(moduleInfo);","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":" case \"left\": {","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"janelleenqi"},"content":" ArrayList\u003cString\u003e modules \u003d listModulesLeft();","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(\"Modules left:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"janelleenqi"},"content":" for (String module : modules) {","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(module);","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"janelleenqi"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"ryanlohyr"},"content":" case \"pace\": {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"ryanlohyr"},"content":" //assumed that everyone graduates at y4s2","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"ryanlohyr"},"content":" //waiting for retrieving logic","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"ryanlohyr"},"content":" int modulesCreditsCompleted \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"ryanlohyr"},"content":" int totalCreditsToGraduate \u003d 160;","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d totalCreditsToGraduate - modulesCreditsCompleted;","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"ryanlohyr"},"content":" computePace(words, creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"ryanlohyr"},"content":" case \"prereq\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":107,"author":{"gitId":"ryanlohyr"},"content":" if(!Parser.isValidInput(\"prereq\",words)){","lastModifiedDate":"2023-10-28"},{"lineNumber":108,"author":{"gitId":"ryanlohyr"},"content":" ErrorHandler.invalidInput();","lastModifiedDate":"2023-10-28"},{"lineNumber":109,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":110,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryanlohyr"},"content":" String keyword \u003d words[1];","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(getModulePrereqBasedOnCourse(keyword.toUpperCase(), \"CEG\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":113,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"SebasFok"},"content":" case \"major\": {","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"SebasFok"},"content":" String printMessageCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"SebasFok"},"content":" switch (printMessageCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"SebasFok"},"content":" case \"currentMajor\":","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"SebasFok"},"content":" view.displayMessage(\"Current major is \" + student.getMajor() + \".\");","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"SebasFok"},"content":" case \"newMajor\":","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"SebasFok"},"content":" view.displayMessage(\"Major \" + student.getMajor() + \" selected!\");","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"SebasFok"},"content":" case \"invalidMajor\":","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"SebasFok"},"content":" view.displayMessage(\"Please select a major from this list: \" + Arrays.toString(Major.values()));","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"SebasFok"},"content":" // Empty default branch as printMessageCommand cannot take any other value","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"SebasFok"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"SebasFok"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"janelleenqi"},"content":" case \"required\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"janelleenqi"},"content":" try {","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"janelleenqi"},"content":" view.printTXTFile(DataRepository.getFullRequirements(student.getMajor()));","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"janelleenqi"},"content":" } catch (NullPointerException | FileNotFoundException e) {","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(\"☹ An error occurred. \" + e.getMessage());","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"janelleenqi"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"CerIsaiah"},"content":" case \"complete\": {","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"CerIsaiah"},"content":" if (addModulePreqs.checkModInput(words, modulesMajor)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"CerIsaiah"},"content":" String moduleCompleted \u003d words[1];","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"CerIsaiah"},"content":" addModulePreqs.getUnlockedMods(moduleCompleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"CerIsaiah"},"content":" addModulePreqs.printUnlockedMods(moduleCompleted);","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":149,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"ryanlohyr"},"content":" default: {","lastModifiedDate":"2023-10-12"},{"lineNumber":151,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"Hello \" + userInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":152,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":153,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":154,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":155,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":156,"author":{"gitId":"ryanlohyr"},"content":" userInput \u003d in.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":157,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":158,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":159,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"ryanlohyr"},"content":" * Computes and returns the list of modules that are left in the ModuleList modulesMajor","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"ryanlohyr"},"content":" * after subtracting the modules in the ModuleList modulesTaken.","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":166,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":167,"author":{"gitId":"ryanlohyr"},"content":" * @return An ArrayList of module codes representing the modules left after the subtraction.","lastModifiedDate":"2023-10-17"},{"lineNumber":168,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":169,"author":{"gitId":"ryanlohyr"},"content":" public ArrayList\u003cString\u003e listModulesLeft() {","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"ryanlohyr"},"content":" //modulesMajor.txt - modulesTaken.txt","lastModifiedDate":"2023-10-17"},{"lineNumber":171,"author":{"gitId":"ryanlohyr"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":172,"author":{"gitId":"ryanlohyr"},"content":" modulesLeft.getDifference(modulesMajor, modulesTaken);","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"ryanlohyr"},"content":" return modulesLeft.getMainModuleList();","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"ryanlohyr"},"content":" } catch (InvalidObjectException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"janelleenqi"},"content":" view.displayMessage(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-10-29"},{"lineNumber":176,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":177,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":178,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":179,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":180,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"ryanlohyr"},"content":" * Computes the recommended pace for completing a degree based on the provided academic year","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"ryanlohyr"},"content":" * and credits left until graduation.","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-27"},{"lineNumber":185,"author":{"gitId":"ryanlohyr"},"content":" * @param userInput An array of user input where userInput[0] is the command and userInput[1] is the academic year.","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"ryanlohyr"},"content":" * @param creditsLeft The number of credits left until graduation.","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":188,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"ryanlohyr"},"content":" public void computePace(String[] userInput, int creditsLeft) {","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"ryanlohyr"},"content":" boolean argumentProvided \u003d userInput.length !\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"ryanlohyr"},"content":" //wait for text file logic","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"ryanlohyr"},"content":" if (!argumentProvided) {","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"You currently have \" + creditsLeft + \" MCs till graduation\");","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"ryanlohyr"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"ryanlohyr"},"content":" if (!parser.isValidAcademicYear(userInput[1])) {","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"ryanlohyr"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":198,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":199,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":200,"author":{"gitId":"ryanlohyr"},"content":" String[] parts \u003d userInput[1].split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":201,"author":{"gitId":"ryanlohyr"},"content":" String year \u003d parts[0].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"ryanlohyr"},"content":" String semester \u003d parts[1].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":204,"author":{"gitId":"ryanlohyr"},"content":" int lastSemesterOfYear \u003d 2;","lastModifiedDate":"2023-10-15"},{"lineNumber":205,"author":{"gitId":"ryanlohyr"},"content":" int lastYearOfDegree \u003d 4;","lastModifiedDate":"2023-10-15"},{"lineNumber":206,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":207,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":208,"author":{"gitId":"ryanlohyr"},"content":" int yearIntValue \u003d Character.getNumericValue(year.charAt(1));","lastModifiedDate":"2023-10-15"},{"lineNumber":209,"author":{"gitId":"ryanlohyr"},"content":" int semesterIntValue \u003d Character.getNumericValue(semester.charAt(1));","lastModifiedDate":"2023-10-15"},{"lineNumber":210,"author":{"gitId":"ryanlohyr"},"content":" //if we are at y2s1, we have 5 semesters left","lastModifiedDate":"2023-10-15"},{"lineNumber":211,"author":{"gitId":"ryanlohyr"},"content":" int semestersLeft \u003d (lastYearOfDegree - yearIntValue) * 2 + (lastSemesterOfYear - semesterIntValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":212,"author":{"gitId":"ryanlohyr"},"content":" int creditsPerSem \u003d Math.round((float) creditsLeft / semestersLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":213,"author":{"gitId":"ryanlohyr"},"content":" view.displayMessage(\"You have \" + creditsLeft + \"MCs for \" + semestersLeft + \" semesters. \"","lastModifiedDate":"2023-10-15"},{"lineNumber":214,"author":{"gitId":"ryanlohyr"},"content":" + \"Recommended Pace: \"+ creditsPerSem + \"MCs per sem until graduation\");","lastModifiedDate":"2023-10-15"},{"lineNumber":215,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":216,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"CerIsaiah"},"content":" * Add all mods that require prerequisites to a map storing the mod and a set of preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"CerIsaiah"},"content":" * @param list","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"CerIsaiah"},"content":" * @return HashMap of Mods with their corresponding preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"CerIsaiah"},"content":" private HashMap\u003cString, List\u003cString\u003e\u003e addModsWithPreqs(HashMap\u003cString, List\u003cString\u003e\u003e list) {","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"CerIsaiah"},"content":" //Only two mods don\u0027t have preqs MA1511 and CS1231S.","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"CerIsaiah"},"content":" // In the future this will be dealt","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS3230\", \"CS2030S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS3230\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2030S\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2040S\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2106\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"CerIsaiah"},"content":" addValue(list, \"CS2109S\", \"CS1231S\");","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"CerIsaiah"},"content":" return list;","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"CerIsaiah"},"content":" * Helper function to addModsWithPreqs to add Strings and sets together","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"CerIsaiah"},"content":" * @param map","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"CerIsaiah"},"content":" * @param key","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"CerIsaiah"},"content":" * @param value","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"CerIsaiah"},"content":" public static void addValue(HashMap\u003cString, List\u003cString\u003e\u003e map, String key, String value) {","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"CerIsaiah"},"content":" // If the map does not contain the key, put an empty list for that key","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"author":{"gitId":"CerIsaiah"},"content":" if (!map.containsKey(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"CerIsaiah"},"content":" map.put(key, new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"CerIsaiah"},"content":" // Add the value to the list associated with the key","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"CerIsaiah"},"content":" map.get(key).add(value);","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"SebasFok":20,"ryanlohyr":139,"janelleenqi":31,"rohitcube":1,"CerIsaiah":66}},{"path":"src/main/java/seedu/duke/models/logic/Api.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"rohitcube"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"rohitcube"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"rohitcube"},"content":"import java.net.URISyntaxException;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"rohitcube"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"rohitcube"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"rohitcube"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"//import java.util.*;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.parser.JSONParser;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.parser.ParseException;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":"import static seedu.duke.models.logic.DataRepository.getRequirements;","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"rohitcube"},"content":"public class Api {","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" * Retrieves the prerequisite tree for a module specified by its code.","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":" * @param moduleCode The code of the module for which prerequisites are to be retrieved.","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" * @return A JSON object representing the prerequisite tree for the module. The prerequisite tree can be in one of","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" * the following formats:","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":" * - If there are no prerequisites, it returns null.","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":" * - If there is a single prerequisite, it returns a JSON object with the key \"or\" containing a list with","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" * the single prerequisite.","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" * - If there are multiple prerequisites, it returns a JSON object representing the full prerequisite tree.","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" private static JSONObject getModulePrereqTree(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" JSONObject fullModuleInfo \u003d getFullModuleInfo(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":" if(fullModuleInfo \u003d\u003d null){","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" //prereqTree can be returned as a string(single pre requisite), null(No pre requisites) or object","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" Object prereqTree \u003d fullModuleInfo.get(\"prereqTree\");","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" if(prereqTree \u003d\u003d null){","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" }else if(prereqTree instanceof String){","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" JSONObject jsonObject \u003d new JSONObject();","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e requirementList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"ryanlohyr"},"content":" requirementList.add((String) prereqTree);","lastModifiedDate":"2023-10-28"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":" jsonObject.put(\"or\", requirementList);","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" return jsonObject;","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" return (JSONObject) fullModuleInfo.get(\"prereqTree\");","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" private static boolean isModuleException(String moduleCode){","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e exemptedModules \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" exemptedModules.add(\"CS1231\");","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" exemptedModules.add(\"MA1508E\");","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" exemptedModules.add(\"EE4204\");","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" return exemptedModules.contains(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" private static ArrayList\u003cString\u003e getExemptedPrerequisite(String moduleCode){","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":" HashMap\u003cString, ArrayList\u003cString\u003e\u003e map \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e list1 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":" list1.add(\"MA1511\");","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" list1.add(\"MA1512\");","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":" map.put(\"CS1231\", list1);","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e list2 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":" list2.add(\"MA1511\");","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" list2.add(\"MA1512\");","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":" map.put(\"MA1508E\", list2);","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e list3 \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":" list3.add(\"ST2334\");","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":" map.put(\"EE4204\", list3);","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"ryanlohyr"},"content":" return map.get(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"ryanlohyr"},"content":" public static JSONObject getFullModuleInfo(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"rohitcube"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"rohitcube"},"content":" String url \u003d \"https://api.nusmods.com/v2/2023-2024/modules/\" + moduleCode + \".json\";","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"rohitcube"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"rohitcube"},"content":" HttpRequest request \u003d HttpRequest.newBuilder()","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"rohitcube"},"content":" .uri(new URI(url))","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"rohitcube"},"content":" .GET()","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"rohitcube"},"content":" .build();","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"rohitcube"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"rohitcube"},"content":" String responseBody \u003d response.body();","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"rohitcube"},"content":" JSONParser parser \u003d new JSONParser();","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"rohitcube"},"content":" // Will refactor the variable later on, left it for easier readability","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"ryanlohyr"},"content":" return (JSONObject) parser.parse(responseBody);","lastModifiedDate":"2023-10-28"},{"lineNumber":95,"author":{"gitId":"rohitcube"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"rohitcube"},"content":" //to be replaced with more robust error class in the future","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Invalid Module Name\");","lastModifiedDate":"2023-10-28"},{"lineNumber":98,"author":{"gitId":"rohitcube"},"content":" } catch (IOException | InterruptedException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Invalid Module Name\");","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"rohitcube"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"rohitcube"},"content":" } catch (URISyntaxException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"rohitcube"},"content":" //to be replaced with more robust error class in the future","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"rohitcube"},"content":" System.out.println(\"Sorry, there was an error with\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"rohitcube"},"content":" \" the provided URL: \" + e.getMessage());","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"rohitcube"},"content":" return null;","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"ryanlohyr"},"content":" public static String getModuleInfoDescription(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":110,"author":{"gitId":"ryanlohyr"},"content":" JSONObject fullModuleInfo \u003d getFullModuleInfo(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryanlohyr"},"content":" assert fullModuleInfo !\u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"ryanlohyr"},"content":" return (String) fullModuleInfo.get(\"description\");","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"ryanlohyr"},"content":" public static String getModuleName(String moduleCode) {","lastModifiedDate":"2023-10-28"},{"lineNumber":116,"author":{"gitId":"ryanlohyr"},"content":" JSONObject fullModuleInfo \u003d getFullModuleInfo(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":117,"author":{"gitId":"ryanlohyr"},"content":" assert fullModuleInfo !\u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":118,"author":{"gitId":"ryanlohyr"},"content":" return (String) fullModuleInfo.get(\"title\");","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"ryanlohyr"},"content":" * Recursively flattens and processes a list of module prerequisites.","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"ryanlohyr"},"content":" * @param major The major or program for which prerequisites are being flattened.","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"ryanlohyr"},"content":" * @param prerequisites An ArrayList to store the flattened prerequisites.","lastModifiedDate":"2023-10-28"},{"lineNumber":126,"author":{"gitId":"ryanlohyr"},"content":" * @param modulePrereqArray An ArrayList containing the module prerequisites to be processed.","lastModifiedDate":"2023-10-28"},{"lineNumber":127,"author":{"gitId":"ryanlohyr"},"content":" * @param courseRequirements An ArrayList containing course requirements.","lastModifiedDate":"2023-10-28"},{"lineNumber":128,"author":{"gitId":"ryanlohyr"},"content":" * @param currRequisite The type of the current prerequisite (e.g., \"and\" or \"or\").","lastModifiedDate":"2023-10-28"},{"lineNumber":129,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"ryanlohyr"},"content":" private static void flattenPrereq(","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"ryanlohyr"},"content":" String major,","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e prerequisites,","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cObjects\u003e modulePrereqArray,","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e courseRequirements,","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"ryanlohyr"},"content":" String currRequisite) {","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"ryanlohyr"},"content":" //base case","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"ryanlohyr"},"content":" for(Object module: modulePrereqArray){","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"ryanlohyr"},"content":" if(module instanceof String){","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"ryanlohyr"},"content":" String formattedModule \u003d ((String) module).replace(\":D\", \"\");","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"ryanlohyr"},"content":" formattedModule \u003d formattedModule.replace(\"%\",\"\");","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"ryanlohyr"},"content":" if(courseRequirements.contains(formattedModule) ){","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"ryanlohyr"},"content":" prerequisites.add(formattedModule);","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"ryanlohyr"},"content":" if(currRequisite.equals(\"or\")){","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"ryanlohyr"},"content":" return;","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"ryanlohyr"},"content":" }else{","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"ryanlohyr"},"content":" //item is an object","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"ryanlohyr"},"content":" //here, we determine if its \u0027or\u0027 or \u0027and\u0027","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"ryanlohyr"},"content":" JSONObject moduleJSON \u003d (JSONObject) module;","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"ryanlohyr"},"content":" String key \u003d (String) moduleJSON.keySet().toArray()[0];","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cObjects\u003e initial \u003d (ArrayList\u003cObjects\u003e) moduleJSON.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"ryanlohyr"},"content":" flattenPrereq(major, prerequisites, initial, getRequirements(major), key);","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"ryanlohyr"},"content":" * Retrieves the prerequisite array for a module specified by its code and also taking into account the degree","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"ryanlohyr"},"content":" * requirements of the course.","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"ryanlohyr"},"content":" * @author ryanlohyr","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"ryanlohyr"},"content":" * @param moduleCode The code of the module for which prerequisites are to be retrieved.","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"ryanlohyr"},"content":" * @return A JSONObject representing the prerequisite tree for the module,","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"ryanlohyr"},"content":" * or NULL if no prerequisites are specified.","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"ryanlohyr"},"content":" public static ArrayList\u003cString\u003e getModulePrereqBasedOnCourse(String moduleCode, String major) {","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"ryanlohyr"},"content":" // Only accepts CEG requirements now","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"ryanlohyr"},"content":" if(!Objects.equals(major, \"CEG\")){","lastModifiedDate":"2023-10-28"},{"lineNumber":173,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":174,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":175,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":176,"author":{"gitId":"ryanlohyr"},"content":" //Modules that has prerequisites incorrectly identified by NUSMods","lastModifiedDate":"2023-10-28"},{"lineNumber":177,"author":{"gitId":"ryanlohyr"},"content":" if(isModuleException(moduleCode)){","lastModifiedDate":"2023-10-28"},{"lineNumber":178,"author":{"gitId":"ryanlohyr"},"content":" return getExemptedPrerequisite(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":179,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":180,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":181,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e prerequisites \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":182,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":183,"author":{"gitId":"ryanlohyr"},"content":" JSONObject modulePrereqTree \u003d getModulePrereqTree(moduleCode);","lastModifiedDate":"2023-10-28"},{"lineNumber":184,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":185,"author":{"gitId":"ryanlohyr"},"content":" if(modulePrereqTree \u003d\u003d null){","lastModifiedDate":"2023-10-28"},{"lineNumber":186,"author":{"gitId":"ryanlohyr"},"content":" return null;","lastModifiedDate":"2023-10-28"},{"lineNumber":187,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":188,"author":{"gitId":"ryanlohyr"},"content":" String key \u003d (String) modulePrereqTree.keySet().toArray()[0];","lastModifiedDate":"2023-10-28"},{"lineNumber":189,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":190,"author":{"gitId":"ryanlohyr"},"content":" //settle this warning","lastModifiedDate":"2023-10-28"},{"lineNumber":191,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cObjects\u003e initial \u003d (ArrayList\u003cObjects\u003e) modulePrereqTree.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":192,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":193,"author":{"gitId":"ryanlohyr"},"content":" flattenPrereq(major, prerequisites, initial, getRequirements(major), key);","lastModifiedDate":"2023-10-28"},{"lineNumber":194,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":195,"author":{"gitId":"ryanlohyr"},"content":" return prerequisites;","lastModifiedDate":"2023-10-28"},{"lineNumber":196,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":197,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":200,"author":{"gitId":"rohitcube"},"content":"}","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryanlohyr":153,"rohitcube":47}},{"path":"src/main/java/seedu/duke/models/logic/CompletePreqs.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"CerIsaiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"CerIsaiah"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"CerIsaiah"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"CerIsaiah"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"CerIsaiah"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"CerIsaiah"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"CerIsaiah"},"content":" * CompletePreqs checks which mods are unlocked once you finish a specific module","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"CerIsaiah"},"content":"public class CompletePreqs {","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"CerIsaiah"},"content":" //Full list of mods with modulesWithPreqs","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"CerIsaiah"},"content":" private HashMap\u003cString, List\u003cString\u003e\u003e modulesWithPreqs;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"CerIsaiah"},"content":" private ArrayList\u003cString\u003e addToModulesCompleted;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"CerIsaiah"},"content":" // To track modules that are already unlocked","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"CerIsaiah"},"content":" private Set\u003cString\u003e unlockedModulesSet;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"CerIsaiah"},"content":" public CompletePreqs(HashMap\u003cString, List\u003cString\u003e\u003e inputMods) {","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"CerIsaiah"},"content":" modulesWithPreqs \u003d new HashMap\u003c\u003e(inputMods);","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"CerIsaiah"},"content":" unlockedModulesSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"CerIsaiah"},"content":" addToModulesCompleted \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"CerIsaiah"},"content":" * Create a list of completed mods, hardcoded from startup.","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"CerIsaiah"},"content":" * @param list","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"CerIsaiah"},"content":" public void initializeCompletedMods(ModuleList list) {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"CerIsaiah"},"content":" addToModulesCompleted.addAll(list.getMainModuleList());","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"CerIsaiah"},"content":" for (String mod : addToModulesCompleted) {","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"CerIsaiah"},"content":" processModuleForUnlockingWithoutPrint(mod);","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"CerIsaiah"},"content":" * Prints what mods have been unlocked after input","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"CerIsaiah"},"content":" * @param moduleCompleted","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"CerIsaiah"},"content":" public void getUnlockedMods(String moduleCompleted) {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"CerIsaiah"},"content":" // Check prerequisites of the moduleCompleted","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"CerIsaiah"},"content":" if (modulesWithPreqs.containsKey(moduleCompleted)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"CerIsaiah"},"content":" List\u003cString\u003e unmetPrerequisites \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"CerIsaiah"},"content":" for (String preq : modulesWithPreqs.get(moduleCompleted)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(preq)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"CerIsaiah"},"content":" unmetPrerequisites.add(preq);","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"CerIsaiah"},"content":" //Stops if a completedMod shouldn\u0027t be able to be completed with proper preqs","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"CerIsaiah"},"content":" if (!unmetPrerequisites.isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(moduleCompleted +","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" \" cannot be marked as completed because of uncompleted prerequisites: \"","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" + unmetPrerequisites);","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"CerIsaiah"},"content":" return;","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"CerIsaiah"},"content":" //If its not marked as completed, properly add it to the list","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(moduleCompleted)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"CerIsaiah"},"content":" addToModulesCompleted.add(moduleCompleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(\"Mod completed: \" + moduleCompleted);","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"CerIsaiah"},"content":" printUnlockedMods(moduleCompleted);","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"CerIsaiah"},"content":" * This is only used for the first initalization of the mods.","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"CerIsaiah"},"content":" * @param moduleCompleted","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" private void processModuleForUnlockingWithoutPrint(String moduleCompleted) {","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"CerIsaiah"},"content":" ArrayList\u003cString\u003e newMods \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"CerIsaiah"},"content":" for (String key : modulesWithPreqs.keySet()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"CerIsaiah"},"content":" //If new unlocked mod isn\u0027t marked as complete or unlocked already","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"CerIsaiah"},"content":" if (!unlockedModulesSet.contains(key) \u0026\u0026 !addToModulesCompleted.contains(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"CerIsaiah"},"content":" boolean allPrerequisitesMet \u003d true;","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"CerIsaiah"},"content":" for (String preq : modulesWithPreqs.get(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(preq)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"CerIsaiah"},"content":" //Make sure preq isn\u0027t already marked as done","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"CerIsaiah"},"content":" allPrerequisitesMet \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"CerIsaiah"},"content":" if (allPrerequisitesMet) {","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"CerIsaiah"},"content":" newMods.add(key);","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"CerIsaiah"},"content":" unlockedModulesSet.add(key);","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"CerIsaiah"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"CerIsaiah"},"content":" * @param moduleCompleted","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"CerIsaiah"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"CerIsaiah"},"content":" public void printUnlockedMods(String moduleCompleted) {","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"CerIsaiah"},"content":" ArrayList\u003cString\u003e newlyUnlockedMods \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"CerIsaiah"},"content":" for (String key : modulesWithPreqs.keySet()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"CerIsaiah"},"content":" //If new unlocked mod isn\u0027t marked as complete or unlocked already","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"CerIsaiah"},"content":" if (!unlockedModulesSet.contains(key) \u0026\u0026 !addToModulesCompleted.contains(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"CerIsaiah"},"content":" boolean allPrerequisitesMet \u003d true;","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"CerIsaiah"},"content":" for (String preq : modulesWithPreqs.get(key)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"CerIsaiah"},"content":" if (!addToModulesCompleted.contains(preq)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"CerIsaiah"},"content":" //Make sure preq isn\u0027t already marked as done","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"CerIsaiah"},"content":" allPrerequisitesMet \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"CerIsaiah"},"content":" break;","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"CerIsaiah"},"content":" if (allPrerequisitesMet) {","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"CerIsaiah"},"content":" newlyUnlockedMods.add(key);","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"CerIsaiah"},"content":" unlockedModulesSet.add(key);","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"CerIsaiah"},"content":" for (String mod : newlyUnlockedMods) {","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(mod + \" has been unlocked!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"CerIsaiah"},"content":" public void printModsCompleted(){","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"CerIsaiah"},"content":" for (String mod: addToModulesCompleted){","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(mod + \"has been completed\");","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"CerIsaiah"},"content":" public boolean checkModInput(String[] words, ModuleList list){","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"CerIsaiah"},"content":" if (words.length \u003d\u003d 2){","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"CerIsaiah"},"content":" if (list.getMainModuleList().contains(words[1])){","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"CerIsaiah"},"content":" return true;","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(\"Please enter a available mod: \");","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"CerIsaiah"},"content":" list.printMainModuleList();","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"CerIsaiah"},"content":" return false;","lastModifiedDate":"2023-10-25"},{"lineNumber":142,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"CerIsaiah"},"content":" System.out.println(\"Please enter a available mod after the complete keyword\");","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"CerIsaiah"},"content":" list.printMainModuleList();","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"CerIsaiah"},"content":" return false;","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"CerIsaiah"},"content":"}","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"ryanlohyr":7,"CerIsaiah":142}},{"path":"src/main/java/seedu/duke/models/logic/DataRepository.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"import seedu.duke.models.schema.Major;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"import java.io.File;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"public class DataRepository {","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":" * Retrieves a list of modules requirements for a specified major.","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":" * @param major The major for which to retrieve requirements.","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":" * @return An ArrayList of module codes.","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"janelleenqi"},"content":" * @throws RuntimeException If the specified major requirements file is not found.","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"janelleenqi"},"content":" public static ArrayList\u003cString\u003e getRequirements(String major){","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":" try {","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" //add validation if wrong major?","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" String fileName \u003d String.format(\"src/main/java/seedu/duke/models/data/%sRequirements\",major);","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" File f \u003d new File(fileName);","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"File does not exist\");","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e currentArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" String currentLine \u003d s.nextLine();","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"janelleenqi"},"content":" String[] words \u003d currentLine.split(\" \");","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"janelleenqi"},"content":" if (!currentLine.isEmpty() \u0026\u0026 !currentLine.startsWith(\"*\")) { // not empty line, not title","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" currentArray.add(words[0]);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" return currentArray;","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":" * Returns the file path for the requirements of a specified major.","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":" * @param major The major for which to retrieve the requirements file path.","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":" * @return The file path to the major\u0027s requirements file.","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":" public static String getFullRequirements(Major major){","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":" return String.format(\"src/main/java/seedu/duke/models/data/%sRequirements\", major.toString());","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":29,"janelleenqi":27}},{"path":"src/main/java/seedu/duke/models/logic/ModuleList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"import java.io.InvalidObjectException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"public class ModuleList {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":" private ArrayList\u003cString\u003e mainModuleList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"janelleenqi"},"content":" private int numberOfModules;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"janelleenqi"},"content":" public ModuleList(String modules) {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":" String[] moduleArray \u003d modules.split(\" \");","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":" mainModuleList \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":" numberOfModules \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":" for (String module : moduleArray) {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":" mainModuleList.add(module);","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"janelleenqi"},"content":" numberOfModules +\u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"janelleenqi"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"janelleenqi"},"content":" new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"janelleenqi"},"content":" public ModuleList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":" mainModuleList \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" numberOfModules \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"janelleenqi"},"content":" * Computes the difference between two ModuleList objects (A - B) and updates the current list.","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" * @param a The first ModuleList.","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" * @param b The second ModuleList.","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"janelleenqi"},"content":" * @throws InvalidObjectException If either A or B is null.","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":" public void getDifference (ModuleList a, ModuleList b) throws InvalidObjectException {","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":" //A - B","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" if (a \u003d\u003d null || b \u003d\u003d null) {","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"janelleenqi"},"content":" throw new InvalidObjectException(\"Null Inputs\");","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":" mainModuleList.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" for (String moduleA : a.mainModuleList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":" if (!b.exists(moduleA)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":" mainModuleList.add(moduleA);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":" numberOfModules +\u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":" } catch (InvalidObjectException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":" System.out.println(\"Error: \" + e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":" * Checks if a module exists in the list.","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":" * @param moduleA The module to check for existence.","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":" * @return true if the module exists in the list; false otherwise.","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":" * @throws InvalidObjectException If moduleA is null.","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":" public boolean exists(String moduleA) throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"janelleenqi"},"content":" if (moduleA \u003d\u003d null || mainModuleList \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"janelleenqi"},"content":" throw new InvalidObjectException(\"Null Inputs\");","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"janelleenqi"},"content":" for (String moduleB : mainModuleList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"janelleenqi"},"content":" if (moduleA.equals(moduleB)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"janelleenqi"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"janelleenqi"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"janelleenqi"},"content":" * Retrieves the list of modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"janelleenqi"},"content":" * @author janelleenqi","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"janelleenqi"},"content":" * @return The ArrayList containing the modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"janelleenqi"},"content":" public ArrayList\u003cString\u003e getMainModuleList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"janelleenqi"},"content":" assert mainModuleList !\u003d null: \"null mainModuleList\";","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"janelleenqi"},"content":" return mainModuleList;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"CerIsaiah"},"content":" public void printMainModuleList(){","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"CerIsaiah"},"content":" for (String mod: mainModuleList){","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"CerIsaiah"},"content":" System.out.print(mod + \" \");","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"CerIsaiah"},"content":" System.out.println();","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"CerIsaiah"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"CerIsaiah"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"janelleenqi"},"content":" * Retrieves the number of modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" * @return The number of modules.","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":" public int getNumberOfModules() {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":" assert numberOfModules \u003e\u003d 0: \"negative numberOfModules\";","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":" return numberOfModules;","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":107,"author":{"gitId":"janelleenqi"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ryanlohyr":9,"janelleenqi":91,"CerIsaiah":7}},{"path":"src/main/java/seedu/duke/models/logic/ScheduleGenerator.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class ScheduleGenerator {","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":" //we need to create a requisite sorter","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":7}},{"path":"src/main/java/seedu/duke/models/schema/Major.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.schema;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"public enum Major {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":" CS, CEG","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"SebasFok":4,"ryanlohyr":1}},{"path":"src/main/java/seedu/duke/models/schema/Module.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.schema;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"public class Module {","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":" //defining your module object etc","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ryanlohyr":4}},{"path":"src/main/java/seedu/duke/models/schema/Student.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.schema;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"public class Student {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":" private String name;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":" private Major major;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"SebasFok"},"content":" public Student(String name, Major major) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"SebasFok"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"SebasFok"},"content":" this.major \u003d major;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"SebasFok"},"content":" public Student() {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"SebasFok"},"content":" this.name \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"SebasFok"},"content":" this.major \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"SebasFok"},"content":" public String getName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"SebasFok"},"content":" return name;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"janelleenqi"},"content":" public Major getMajor() throws NullPointerException {","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"SebasFok"},"content":" return major;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"SebasFok"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"SebasFok"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"SebasFok"},"content":" public void setMajor(Major major) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"SebasFok"},"content":" this.major \u003d major;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"SebasFok"},"content":" public String updateMajor(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"SebasFok"},"content":" String[] words \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"SebasFok"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"SebasFok"},"content":" return \"currentMajor\";","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"SebasFok"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"SebasFok"},"content":" setMajor(Major.valueOf(words[1].toUpperCase()));","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"SebasFok"},"content":" return \"newMajor\";","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"SebasFok"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"SebasFok"},"content":" return \"invalidMajor\";","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"SebasFok"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"SebasFok":44,"ryanlohyr":1,"janelleenqi":1}},{"path":"src/main/java/seedu/duke/utils/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.utils;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class Parser {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":" * Checks if the given academic year input is valid.","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":" * The academic year should be in the format \"Yn/Sx\", where \u0027n\u0027 represents the year","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":" * and \u0027x\u0027 represents the semester (e.g., Y1/S1, Y2/S2).","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" * @author @ryanlohyr","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" * @param userInput The academic year input to be validated.","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":" * @return true if the input is a valid academic year, false otherwise.","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"ryanlohyr"},"content":" * @throws IllegalArgumentException if the input format is incorrect or if the year or semester is invalid.","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":" *","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":" public boolean isValidAcademicYear( String userInput ) {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":" String[] parts \u003d userInput.split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":" if(parts.length !\u003d 2){","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Needs to be in format of Y2/S1\");","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":" String year \u003d parts[0].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" String semester \u003d parts[1].toUpperCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" //last year","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" if(year.equals(\"Y4\") \u0026\u0026 semester.equals(\"S2\")){","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Its your last sem!! A bit too late ya....\");","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" //validate semester","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" if(!semester.equals(\"S1\") \u0026\u0026 !semester.equals(\"S2\")){","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Invalid Semester\");","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":" //validate year","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"ryanlohyr"},"content":" if (!(year.equals(\"Y1\") || year.equals(\"Y2\") || year.equals(\"Y3\") || year.equals(\"Y4\"))) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":" // The input is not \"Y1,\" \"Y2,\" \"Y3,\" or \"Y4\"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" throw new IllegalArgumentException(\"Invalid Year\");","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" return true;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"ryanlohyr"},"content":" public static boolean isValidInput(String command, String[] words) {","lastModifiedDate":"2023-10-28"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" switch (command) {","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"ryanlohyr"},"content":" case \"prereq\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":51,"author":{"gitId":"ryanlohyr"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" case \"test\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" if (words.length \u003c 23) {","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":" case \"test2\": {","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" if (words.length \u003c 21) {","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":" return false;","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":" default: {","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":" return true;","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":" return true;","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ryanlohyr":78}},{"path":"src/main/java/seedu/duke/views/CommandLineView.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.views;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"import java.io.File;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"janelleenqi"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"public class CommandLineView {","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":" private int formatLineLength \u003d 0;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"janelleenqi"},"content":" private final int accountForTabs \u003d 15;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" public void displayWelcome(){","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"ryanlohyr"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"What is your name?\");","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"janelleenqi"},"content":" * Display a message to the command line view.","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"janelleenqi"},"content":" * @param o The object to be displayed.","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":" public void displayMessage(Object o) {","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" System.out.println(o);","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"janelleenqi"},"content":" * Display an empty line to the command line view.","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"janelleenqi"},"content":" public void displayMessage() {","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"janelleenqi"},"content":" System.out.println();","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"janelleenqi"},"content":" * Print a top line for a formatted subheader.","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"janelleenqi"},"content":" private void printTopLine() {","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"janelleenqi"},"content":" displayMessage(String.format(\"┌%-\" + formatLineLength + \"s┐\", \"\").replace(\u0027 \u0027, \u0027-\u0027));","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"janelleenqi"},"content":" * Print a double top line for a formatted header.","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":" private void printDoubleTopLine() {","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":" displayMessage(String.format(\"╔%-\" + formatLineLength + \"s╗\", \"\").replace(\u0027 \u0027, \u0027\u003d\u0027));","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":" * Print a bottom line for a formatted subheader.","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":" private void printBottomLine() {","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":" displayMessage(String.format(\"└%-\" + formatLineLength + \"s┘\", \"\").replace(\u0027 \u0027, \u0027-\u0027));","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":" * Print a double bottom line for a formatted header.","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":" private void printDoubleBottomLine() {","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":" displayMessage(String.format(\"╚%-\" + formatLineLength + \"s╝\", \"\").replace(\u0027 \u0027, \u0027\u003d\u0027));","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"janelleenqi"},"content":" * Return a justified string with a specified length.","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"janelleenqi"},"content":" * @param name The name part of the string.","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"janelleenqi"},"content":" * @param description The description part of the string.","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"janelleenqi"},"content":" * @param length The total length of the formatted string.","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"janelleenqi"},"content":" * @return The justified string.","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"janelleenqi"},"content":" private String returnJustified(String name, String description, int length) {","lastModifiedDate":"2023-10-29"},{"lineNumber":74,"author":{"gitId":"janelleenqi"},"content":" return String.format(\"%-\" + length + \"s\\t\", name) + description;","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":77,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":78,"author":{"gitId":"janelleenqi"},"content":" * Print the contents of a text file about major requirements with structured formatting.","lastModifiedDate":"2023-10-29"},{"lineNumber":79,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":80,"author":{"gitId":"janelleenqi"},"content":" * @param filePath The path to the text file to be printed.","lastModifiedDate":"2023-10-29"},{"lineNumber":81,"author":{"gitId":"janelleenqi"},"content":" * @throws FileNotFoundException If the file specified by filePath is not found.","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":83,"author":{"gitId":"janelleenqi"},"content":" public void printTXTFile(String filePath) throws FileNotFoundException {","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"janelleenqi"},"content":" File f \u003d new File(filePath); // create a File for the given file path","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"janelleenqi"},"content":" int longestLineLength \u003d getLongestLineLength(f);","lastModifiedDate":"2023-10-29"},{"lineNumber":86,"author":{"gitId":"janelleenqi"},"content":" formatLineLength \u003d longestLineLength + accountForTabs;","lastModifiedDate":"2023-10-29"},{"lineNumber":87,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-29"},{"lineNumber":89,"author":{"gitId":"janelleenqi"},"content":" String moduleName;","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"janelleenqi"},"content":" String moduleMCs;","lastModifiedDate":"2023-10-29"},{"lineNumber":91,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"janelleenqi"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":93,"author":{"gitId":"janelleenqi"},"content":" String currentLine \u003d s.nextLine();","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"janelleenqi"},"content":" if (currentLine.indexOf(\" - \") \u003e 0) { //module exist","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"janelleenqi"},"content":" moduleName \u003d currentLine.substring(0, currentLine.indexOf(\" - \"));","lastModifiedDate":"2023-10-29"},{"lineNumber":96,"author":{"gitId":"janelleenqi"},"content":" moduleMCs \u003d currentLine.substring(currentLine.indexOf(\" - \") + 3);","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"janelleenqi"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":" moduleName \u003d currentLine;","lastModifiedDate":"2023-10-29"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" moduleMCs \u003d \"\";","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":" if (currentLine.startsWith(\"***\")) { //subsubheader","lastModifiedDate":"2023-10-29"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":" String actualModuleName \u003d moduleName.substring(3);","lastModifiedDate":"2023-10-29"},{"lineNumber":104,"author":{"gitId":"janelleenqi"},"content":" displayMessage(\" ~~\\t\" + returnJustified(actualModuleName, moduleMCs, longestLineLength) + \"\\t ~~\");","lastModifiedDate":"2023-10-29"},{"lineNumber":105,"author":{"gitId":"janelleenqi"},"content":" displayMessage();","lastModifiedDate":"2023-10-29"},{"lineNumber":106,"author":{"gitId":"janelleenqi"},"content":" } else if (currentLine.startsWith(\"**\")) { //subheader has box","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"janelleenqi"},"content":" printTopLine();","lastModifiedDate":"2023-10-29"},{"lineNumber":108,"author":{"gitId":"janelleenqi"},"content":" String actualModuleName \u003d moduleName.substring(2);","lastModifiedDate":"2023-10-29"},{"lineNumber":109,"author":{"gitId":"janelleenqi"},"content":" displayMessage(\"│\\t\" + returnJustified(actualModuleName, moduleMCs, longestLineLength) + \"\\t\\t│\");","lastModifiedDate":"2023-10-29"},{"lineNumber":110,"author":{"gitId":"janelleenqi"},"content":" printBottomLine();","lastModifiedDate":"2023-10-29"},{"lineNumber":111,"author":{"gitId":"janelleenqi"},"content":" } else if (currentLine.startsWith(\"*\")) { //header","lastModifiedDate":"2023-10-29"},{"lineNumber":112,"author":{"gitId":"janelleenqi"},"content":" printDoubleTopLine();","lastModifiedDate":"2023-10-29"},{"lineNumber":113,"author":{"gitId":"janelleenqi"},"content":" String actualModuleName \u003d moduleName.substring(1);","lastModifiedDate":"2023-10-29"},{"lineNumber":114,"author":{"gitId":"janelleenqi"},"content":" displayMessage(\"║\\t\" + returnJustified(actualModuleName, moduleMCs, longestLineLength) + \"\\t║\");","lastModifiedDate":"2023-10-29"},{"lineNumber":115,"author":{"gitId":"janelleenqi"},"content":" printDoubleBottomLine();","lastModifiedDate":"2023-10-29"},{"lineNumber":116,"author":{"gitId":"janelleenqi"},"content":" } else if (!currentLine.isEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":117,"author":{"gitId":"janelleenqi"},"content":" displayMessage(\"\\t\" + returnJustified(moduleName, moduleMCs, longestLineLength));","lastModifiedDate":"2023-10-29"},{"lineNumber":118,"author":{"gitId":"janelleenqi"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"janelleenqi"},"content":" displayMessage();","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":121,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":122,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"janelleenqi"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"janelleenqi"},"content":" * Find the length of the longest line in a text file.","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"janelleenqi"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"janelleenqi"},"content":" * @param f The text file to analyze.","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"janelleenqi"},"content":" * @return The length of the longest line found.","lastModifiedDate":"2023-10-29"},{"lineNumber":130,"author":{"gitId":"janelleenqi"},"content":" * @throws FileNotFoundException If the file specified by f is not found.","lastModifiedDate":"2023-10-29"},{"lineNumber":131,"author":{"gitId":"janelleenqi"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":132,"author":{"gitId":"janelleenqi"},"content":" private static int getLongestLineLength(File f) throws FileNotFoundException {","lastModifiedDate":"2023-10-29"},{"lineNumber":133,"author":{"gitId":"janelleenqi"},"content":" Scanner s \u003d new Scanner(f); // create a Scanner using the File as the source","lastModifiedDate":"2023-10-29"},{"lineNumber":134,"author":{"gitId":"janelleenqi"},"content":" int longestLineLength \u003d 0;","lastModifiedDate":"2023-10-29"},{"lineNumber":135,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":136,"author":{"gitId":"janelleenqi"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"janelleenqi"},"content":" String currentLine \u003d s.nextLine();","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"janelleenqi"},"content":" if (currentLine.indexOf(\" - \") \u003e longestLineLength) {","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"janelleenqi"},"content":" longestLineLength \u003d currentLine.indexOf(\" - \");","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"janelleenqi"},"content":" if (longestLineLength % 4 \u003e 0) { // remainder","lastModifiedDate":"2023-10-29"},{"lineNumber":143,"author":{"gitId":"janelleenqi"},"content":" longestLineLength \u003d (longestLineLength / 4) * 4;","lastModifiedDate":"2023-10-29"},{"lineNumber":144,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":145,"author":{"gitId":"janelleenqi"},"content":" return longestLineLength;","lastModifiedDate":"2023-10-29"},{"lineNumber":146,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":147,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ryanlohyr":16,"janelleenqi":131}},{"path":"src/main/java/seedu/duke/views/ErrorHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.views;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"public class ErrorHandler {","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":" public static void invalidInput(){","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"Invalid Input provided\");","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":7}},{"path":"src/main/java/seedu/duke/views/ModuleInfo.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"rohitcube"},"content":"package seedu.duke.views;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"rohitcube"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"rohitcube"},"content":"public class ModuleInfo {","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"rohitcube"},"content":" public static void printModule(JSONObject module) {","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"rohitcube"},"content":" System.out.println(module);","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"rohitcube"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"rohitcube"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"rohitcube"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"rohitcube":10}},{"path":"src/test/java/seedu/duke/ModuleListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"janelleenqi"},"content":"package seedu.duke;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"janelleenqi"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.ModuleList;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"janelleenqi"},"content":"import java.io.InvalidObjectException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"janelleenqi"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"janelleenqi"},"content":"class ModuleListTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"janelleenqi"},"content":" //success scenario 1: 2 ModuleList --\u003e difference","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"janelleenqi"},"content":" void getDifferenceTest_twoModuleList_expectDifference() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"janelleenqi"},"content":" ModuleList first \u003d new ModuleList(\"CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"janelleenqi"},"content":" ModuleList second \u003d new ModuleList(\"CS1231S CS2030S CS2040S MA1511\");","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"janelleenqi"},"content":" ModuleList difference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"janelleenqi"},"content":" ModuleList actualDifference \u003d new ModuleList(\"CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"janelleenqi"},"content":" difference.getDifference(first, second);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"janelleenqi"},"content":" int numberOfModules \u003d difference.getNumberOfModules();","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"janelleenqi"},"content":" for (int i \u003d 0; i \u003c numberOfModules; i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"janelleenqi"},"content":" assertEquals(difference.getMainModuleList().get(i), actualDifference.getMainModuleList().get(i));","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"janelleenqi"},"content":" //success scenario 2: 1 empty ModuleList, 1 ModuleList --\u003e difference which is empty","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"janelleenqi"},"content":" void getDifferenceTest_oneEmptyModuleListAnotherModuleList_expectEmptyDifference() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"janelleenqi"},"content":" ModuleList first \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"janelleenqi"},"content":" ModuleList second \u003d new ModuleList(\"CS1231S CS2030S CS2040S MA1511\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"janelleenqi"},"content":" ModuleList difference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"janelleenqi"},"content":" ModuleList actualDifference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"janelleenqi"},"content":" difference.getDifference(first, second);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"janelleenqi"},"content":" int numberOfModules \u003d difference.getNumberOfModules();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"janelleenqi"},"content":" for (int i \u003d 0; i \u003c numberOfModules; i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"janelleenqi"},"content":" assertEquals(difference.getMainModuleList().get(i), actualDifference.getMainModuleList().get(i));","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"janelleenqi"},"content":" //failure scenario 1: null ModuleList input --\u003e throw exception","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"janelleenqi"},"content":" void getDifferenceTest_nullModuleListInput_expectException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"janelleenqi"},"content":" ModuleList first \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"janelleenqi"},"content":" ModuleList second \u003d new ModuleList(\"CS1231S CS2030S CS2040S MA1511\");","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"janelleenqi"},"content":" ModuleList difference \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"janelleenqi"},"content":" assertThrows(InvalidObjectException.class, () -\u003e difference.getDifference(first, second));","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"janelleenqi"},"content":" //success scenario 1: 1 input String, 1 ModuleList that contains input String --\u003e true","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"janelleenqi"},"content":" void existsTest_moduleListContainsModule_expectTrue() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d \"CS1231S\";","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList(\"CS1231S CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"janelleenqi"},"content":" boolean result \u003d ml.exists(inputString);","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"janelleenqi"},"content":" assertTrue(result);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"janelleenqi"},"content":" //success scenario 2: 1 input String, 1 ModuleList that does not contain input String --\u003e false","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"janelleenqi"},"content":" void existsTest_moduleListDoesNotContainModule_expectFalse() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d \"CS1231S\";","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList(\"CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"janelleenqi"},"content":" boolean result \u003d ml.exists(inputString);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"janelleenqi"},"content":" assertFalse(result);","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"janelleenqi"},"content":" //failure scenario 1: input null string, 1 ModuleList --\u003e throw exception","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"janelleenqi"},"content":" void existsTest_nullInput_expectException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList(\"CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"janelleenqi"},"content":" assertThrows(InvalidObjectException.class, () -\u003e ml.exists(inputString));","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"janelleenqi"},"content":" //success scenario 3: input string, 1 empty ModuleList --\u003e false","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"janelleenqi"},"content":" void existsTest_nullMainModuleList_expectException() throws InvalidObjectException {","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"janelleenqi"},"content":" String inputString \u003d \"CS1231S\";","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"janelleenqi"},"content":" ModuleList ml \u003d new ModuleList();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" boolean result \u003d ml.exists(inputString);","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":" assertFalse(result);","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ryanlohyr":1,"janelleenqi":102}},{"path":"src/test/java/seedu/duke/controllers/ModulePlannerControllerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.controllers;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.ModuleList;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"janelleenqi"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.logic.DataRepository;","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"ryanlohyr"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ryanlohyr"},"content":"class ModulePlannerControllerTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"ryanlohyr"},"content":" private final ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"ryanlohyr"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"ryanlohyr"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ryanlohyr"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryanlohyr"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ryanlohyr"},"content":" @AfterEach","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ryanlohyr"},"content":" public void restoreStreams() {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"ryanlohyr"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"ryanlohyr"},"content":" void computePaceWithoutArgument() {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(String.format(\"You currently have %s MCs till graduation\",creditsLeft), printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryanlohyr"},"content":" void computePaceInvalidArgument() {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y2s1\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Needs to be in format of Y2/S1\", printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryanlohyr"},"content":" void test() throws FileNotFoundException {","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(\"testttt\");","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryanlohyr"},"content":" System.out.println(DataRepository.getRequirements(\"CEG\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Needs to be in format of Y2/S1\", \"Needs to be in format of Y2/S1\");","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"ryanlohyr"},"content":" void computePaceInvalidSemester() {","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y2/s10\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Invalid Semester\", printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"ryanlohyr"},"content":" void computePaceInvalidYear() {","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y20/s1\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(\"Invalid Year\", printedOutput);","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"ryanlohyr"},"content":" void computePaceValidYear() {","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"ryanlohyr"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"ryanlohyr"},"content":" String[] userInput \u003d {\"pace\",\"y2/s1\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"ryanlohyr"},"content":" int creditsLeft \u003d 60;","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"ryanlohyr"},"content":" controller.computePace(userInput,creditsLeft);","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"ryanlohyr"},"content":" String test \u003d \"hi\";","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"ryanlohyr"},"content":" // Capture the printed output","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"ryanlohyr"},"content":" String printedOutput \u003d outputStream.toString().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"ryanlohyr"},"content":" String line \u003d \"You have 60MCs for 5 semesters. Recommended Pace: 12MCs per sem until graduation\";","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"ryanlohyr"},"content":" // Assert the printed output matches the expected value","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"ryanlohyr"},"content":" assertEquals(printedOutput, line);","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"janelleenqi"},"content":" //success scenario: difference","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"janelleenqi"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"janelleenqi"},"content":" void listModulesLeftTest_expectArrayList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"janelleenqi"},"content":" ModulePlannerController controller \u003d new ModulePlannerController();","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"CerIsaiah"},"content":" ModuleList actualDifference \u003d new ModuleList(\"CS2030S CS2040S CS2100 CS2101 CS2106 CS2109S CS3230\");","lastModifiedDate":"2023-10-19"},{"lineNumber":105,"author":{"gitId":"janelleenqi"},"content":" ArrayList\u003cString\u003e list \u003d controller.listModulesLeft();","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"janelleenqi"},"content":" //test","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"janelleenqi"},"content":" int numberOfModules \u003d actualDifference.getNumberOfModules();","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"janelleenqi"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"janelleenqi"},"content":" for (int i \u003d 0; i \u003c numberOfModules; i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"janelleenqi"},"content":" assertEquals(actualDifference.getMainModuleList().get(i), list.get(i));","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"janelleenqi"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"SebasFok":1,"ryanlohyr":95,"janelleenqi":17,"CerIsaiah":1}},{"path":"src/test/java/seedu/duke/models/StudentTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"SebasFok"},"content":"package seedu.duke.models;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"SebasFok"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"import seedu.duke.models.schema.Student;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"SebasFok"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"SebasFok"},"content":"public class StudentTest {","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"SebasFok"},"content":" //success scenario: valid major -\u003e major updated","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"SebasFok"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"SebasFok"},"content":" void updateMajorTest_validMajor_expectNewMajorMessage() {","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"SebasFok"},"content":" Student student \u003d new Student();","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"SebasFok"},"content":" String userInput \u003d \"major cs\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"SebasFok"},"content":" String printedOutputCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"SebasFok"},"content":" assertEquals(\"newMajor\", printedOutputCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"SebasFok"},"content":" //success scenario: no major -\u003e return current major","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"SebasFok"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"SebasFok"},"content":" void updateMajorTest_noMajor_expectCurrentMajorMessage() {","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"SebasFok"},"content":" Student student \u003d new Student();","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"SebasFok"},"content":" String userInput \u003d \"major\";","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"SebasFok"},"content":" String printedOutputCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"SebasFok"},"content":" assertEquals(\"currentMajor\", printedOutputCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"SebasFok"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"SebasFok"},"content":" //failure scenario invalid major -\u003e throw exception","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"SebasFok"},"content":" @Test","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"SebasFok"},"content":" void updateMajorTest_invalidMajor_expectFailureMessage() {","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"SebasFok"},"content":" Student student \u003d new Student();","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"SebasFok"},"content":" String userInput \u003d \"major abc\";","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"SebasFok"},"content":" String printedOutputCommand \u003d student.updateMajor(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"SebasFok"},"content":" assertEquals(\"invalidMajor\", printedOutputCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"SebasFok"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"SebasFok"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"SebasFok":34,"ryanlohyr":1}},{"path":"src/test/java/seedu/duke/models/logic/DataRepositoryTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryanlohyr"},"content":"package seedu.duke.models.logic;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"ryanlohyr"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"ryanlohyr"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"ryanlohyr"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryanlohyr"},"content":"class DataRepositoryTest {","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"ryanlohyr"},"content":" @Test","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"ryanlohyr"},"content":" void validRequirementsReturned() {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryanlohyr"},"content":" ArrayList\u003cString\u003e cegRequirementArray \u003d DataRepository.getRequirements(\"CEG\");","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"ryanlohyr"},"content":" assert(!cegRequirementArray.isEmpty());","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryanlohyr"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"ryanlohyr"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"ryanlohyr":13}}] diff --git a/AY2324S1-CS2113-T17-4_tp_master/commits.json b/AY2324S1-CS2113-T17-4_tp_master/commits.json index f467fcb..fdeeb0c 100644 --- a/AY2324S1-CS2113-T17-4_tp_master/commits.json +++ b/AY2324S1-CS2113-T17-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SebasFok":[{"date":"2023-10-05","commitResults":[{"hash":"aeef6fad05b0f6d0f0c354e9db79ba3ecbdfbef9","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-06","commitResults":[{"hash":"2039386c7d8e661b4e7bf66f1d4fa3ea80da23ac","isMergeCommit":false,"messageTitle":"Add AboutUs information for Sebastian","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}}]},{"date":"2023-10-07","commitResults":[{"hash":"de8365c98e9274e9c7b40228f5c687bbb7774a2e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"a728f005673371e58b95131d45ece32ea30c5cf6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from janelleenqi/branch-Edit-AboutUs-v1","messageBody":"janelleenqi-AboutUs","fileTypesAndContributionMap":{}},{"hash":"a53713ffad1e3c43fb6821740bbbae2f0b934975","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2336e0f03aede437eefc987d98349c05b02aecc3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5677d80546a6e55ae3fc9b3c2f9efc6cc36ddfbc","isMergeCommit":true,"messageTitle":"Merge pull request #5 from ryanlohyr/master","messageBody":"Ryanlohyr-AboutUs","fileTypesAndContributionMap":{}},{"hash":"f10394ae22fddfcc20621826cb53a03dd516d990","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-4/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"0d840309811b905770039ac8ee89b6c803eb14ee","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9c3ef1f3c1cd7136c584fdbcd2b00be6f53e8069","isMergeCommit":false,"messageTitle":"Fix AboutUs page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"d97257fe38507e38b90b874e965ec94cc6b5c00a","isMergeCommit":false,"messageTitle":"Revert \"Fix AboutUs page\"","messageBody":"This reverts commit 9c3ef1f3c1cd7136c584fdbcd2b00be6f53e8069.\n","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"d0a5cf6d3dab23e3ab691ed2f8a77ddb0e301864","isMergeCommit":false,"messageTitle":"Fix AboutUs page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"a6429ace4f7089682cc2c231fd5a974b2abacea8","isMergeCommit":true,"messageTitle":"Merge pull request #8 from SebasFok/branch-FixAboutUs","messageBody":"Fix about us page","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"be9eda9ae041c25d60d33065384ebbafb11b421b","isMergeCommit":false,"messageTitle":"Add student class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"f37c8d8033f4f5340abf8af3f6cfee7194242bee","isMergeCommit":false,"messageTitle":"Add \"major\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"2ed39fab10850f7beac9b1dea7710dab4ee3b966","isMergeCommit":false,"messageTitle":"Add enum for majors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":8}}},{"hash":"a777fd584c0ae40bcd4d764c056dde18112af52d","isMergeCommit":false,"messageTitle":"Add tests for \u0027updateMajor\u0027 function","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":26,"deletions":0}}},{"hash":"88ac029553890db8c4945a2fd9d5dce17ff67011","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"20e6817a7cccc59b82ffed3fccf09a44a67b767c","isMergeCommit":true,"messageTitle":"Merge pull request #16 from SebasFok/branch-SelectMajor","messageBody":"Add major feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"f8bdc1bbed8355ad7010bcf3a1dfe6a49b2ac42d","isMergeCommit":false,"messageTitle":"Fix Major command bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":11},"test-code":{"insertions":34,"deletions":24}}},{"hash":"1fd6f85f957f1380b71520ff1ccca4efea83951c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into SebasFok-FixMajor","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/duke/controllers/ModulePlannerControllerTest.java\n","fileTypesAndContributionMap":{}},{"hash":"7ef09a89be73ba92a5b1c84aa9bb8ed37f8681d0","isMergeCommit":false,"messageTitle":"Fix CheckStyle Issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"d98977a14d7f4b3d2de12892a24cd09b46fc462d","isMergeCommit":true,"messageTitle":"Merge pull request #36 from SebasFok/SebasFok-FixMajor","messageBody":"Fix major bugs","fileTypesAndContributionMap":{}},{"hash":"f179c1478f01690019185e566c6739999e30a483","isMergeCommit":false,"messageTitle":"Create Developer Guide for Major feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":38,"deletions":0}}},{"hash":"f2b9bf9248cc0a203e4a62ab5303f80e85729dad","isMergeCommit":true,"messageTitle":"Merge pull request #37 from SebasFok/SebasFok-DGForMajorFeature","messageBody":"Create Developer Guide for Major feature","fileTypesAndContributionMap":{}}]}],"ryanlohyr":[{"date":"2023-10-07","commitResults":[{"hash":"a04733a9b91f0436d9e7599a9dbe7438aa6089a5","isMergeCommit":false,"messageTitle":"Update ryan portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-12","commitResults":[{"hash":"f7df8565f0f1c09b3e97078aa0914ec8c8beb51e","isMergeCommit":false,"messageTitle":"create project base layout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":12}}},{"hash":"448ac15a82ee8f25745d15ad226d9a5dd0f6bc55","isMergeCommit":false,"messageTitle":"Create base project layout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":12}}},{"hash":"9bddadace6b3fe56ea34260bfbf808a576b7e336","isMergeCommit":false,"messageTitle":"Revert \"Create base project layout\"","messageBody":"This reverts commit 448ac15a82ee8f25745d15ad226d9a5dd0f6bc55.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":66}}},{"hash":"5cb0e57054f2e47ba0c944876577e4b36e3cb793","isMergeCommit":true,"messageTitle":"Merge branch \u0027ryan-createLayout\u0027 of https://github.com/ryanlohyr/tp into ryan-createLayout","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"de707c380d524d5b537fa700b0bd3337eb46c778","isMergeCommit":false,"messageTitle":"Fix test bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"52772484e68d1498e236d83c230d6226cc9b0dc3","isMergeCommit":true,"messageTitle":"Merge pull request #7 from ryanlohyr/ryan-createLayout","messageBody":"Create project base layout","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"813fa09444c9155f79f736faadd281e068a13fe7","isMergeCommit":false,"messageTitle":"Add pace feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":4,"deletions":0}}},{"hash":"92685f4a8354d7c9339df54862e8ad730875ae31","isMergeCommit":false,"messageTitle":"Add pace feature v2","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":88,"deletions":3},"test-code":{"insertions":86,"deletions":3}}},{"hash":"e4f352e491e6bee1e281a3aeac2b5cbec16e50ce","isMergeCommit":false,"messageTitle":"fix window os bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":16},"test-code":{"insertions":2,"deletions":4}}},{"hash":"ab09a619ac2be800ae064c73f1b41ce734c8f64b","isMergeCommit":true,"messageTitle":"Merge pull request #9 from ryanlohyr/ryan-paceFeature","messageBody":"Add pace feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"22c9f54fa9950fed39f4313ac4569cfa59a40694","isMergeCommit":false,"messageTitle":"add pace feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":18}}},{"hash":"d3fc98e585ca694c04d379ebc953ff02c874042a","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ryanlohyr/ryan-paceFeature","messageBody":"add pace feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"c12b196537f7101680d6b70f81d40496e13cb010","isMergeCommit":false,"messageTitle":"fix format bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":79}}},{"hash":"7b5a888b1c9c716564aee6458077499f76f301ab","isMergeCommit":true,"messageTitle":"fix test bug","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0e0f7bfab9fd4d4c361e5a315b233c8e07248f71","isMergeCommit":true,"messageTitle":"Merge pull request #22 from ryanlohyr/master","messageBody":"fix formatting and unit test bug","fileTypesAndContributionMap":{}},{"hash":"94d07e6718756e5e3ca942fe01955a4ba192be5c","isMergeCommit":true,"messageTitle":"Merge pull request #21 from rohitcube/master","messageBody":"Add API class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"b36f87967ffacbc039d25221df0214ffb7ec9530","isMergeCommit":false,"messageTitle":"Create developer guide for pace feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2},"other":{"insertions":1,"deletions":1},"docs":{"insertions":28,"deletions":0},"test-code":{"insertions":2,"deletions":1}}},{"hash":"ff1fed86da7619c2faa142dc10f0a5c93da3f6e7","isMergeCommit":true,"messageTitle":"Merge pull request #27 from ryanlohyr/ryan/developer-guide","messageBody":"Create developer guide for pace feature","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"bd43a06ecf5d38a83e18e921c2b2471b97d790f3","isMergeCommit":false,"messageTitle":"Fix repo structure and api mods issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":10},"other":{"insertions":6,"deletions":9},"test-code":{"insertions":4,"deletions":3}}},{"hash":"71fc4612770b0946010116462f06af6ebe347f79","isMergeCommit":true,"messageTitle":"Merge pull request #41 from ryanlohyr/ryan/fix/repo-structure","messageBody":"Fix repo structure and api mods issue","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"472947849c656b0915df4c8752e547ff55cbb61b","isMergeCommit":false,"messageTitle":"Restructure project and add prerequisite function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":242,"deletions":35},"test-code":{"insertions":22,"deletions":50}}},{"hash":"d28259e7dc130809d475536cfcad9c14f94ae623","isMergeCommit":true,"messageTitle":"Merge pull request #42 from ryanlohyr/ryan/feat/prerequisite","messageBody":"Restructure project and add prerequisite function","fileTypesAndContributionMap":{}}]}],"janelleenqi":[{"date":"2023-10-07","commitResults":[{"hash":"b8e95e351ff1f9e8058d1fa4512b9fed2a801ff5","isMergeCommit":true,"messageTitle":"Merge pull request #1 from SebasFok/SebasFok-AboutUs","messageBody":"Add AboutUs information for Sebastian","fileTypesAndContributionMap":{}},{"hash":"215bbf707ba73e12fe4a3852bd195add31b9563b","isMergeCommit":false,"messageTitle":"Edit AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"20248cfdb579d3a65dba6b00480f73fd6818e9de","isMergeCommit":true,"messageTitle":"Merge pull request #3 from rohitcube/master","messageBody":"added profile - rohit","fileTypesAndContributionMap":{}},{"hash":"320cf1073f08efaeb681a28d2a71a2c05d03f61a","isMergeCommit":false,"messageTitle":"Edit AboutUs.md to include github","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"eeadb9d732a337b8cd7c73ed135d8d5aabf3ba2e","isMergeCommit":true,"messageTitle":"Merge AboutUs.md","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"e9a420df1a3a38da09d884a238231f1d151f3f37","isMergeCommit":false,"messageTitle":"add \"left\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":97,"deletions":22}}},{"hash":"d61cfbec5c631f4536a0498f84b53a469717b7a9","isMergeCommit":false,"messageTitle":"delete unnecessary lines","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"9fec7539e4da6bde4964b8bb37ea3827706ac546","isMergeCommit":false,"messageTitle":"add ModuleListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":44,"deletions":0}}},{"hash":"22d2823da7d4c2553ed68abf4765cc2f69476943","isMergeCommit":false,"messageTitle":"add listModulesLeftTest for successful scenario in ModulePlannerControllerTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":20,"deletions":0}}},{"hash":"c14bd0e9753371612f42b4a7653b130eedb55459","isMergeCommit":false,"messageTitle":"add existsTest for successful scenarios in ModuleListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":2}}},{"hash":"fe408d5d36d769ff7ccd93af2aa871dbb174bc36","isMergeCommit":false,"messageTitle":"add some exception handling for ModuleList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":14}}},{"hash":"fff60307f1c5bdb366bcd603e5b712359400b076","isMergeCommit":false,"messageTitle":"add failure scenarios for existsTest and getDifferenceTest in ModuleListTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":8},"test-code":{"insertions":30,"deletions":7}}},{"hash":"21c26955eebadc657445a51c384758035a3bde48","isMergeCommit":false,"messageTitle":"add javadoc comments for functions in the \"left\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":0}}},{"hash":"8789c06c3791750c5fd338706ea328ffb9040de7","isMergeCommit":false,"messageTitle":"Add success scenario where mainModuleList is empty for existsTest for ModuleListTest. This closes #10","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":16},"test-code":{"insertions":11,"deletions":0}}},{"hash":"bd71200339e77f407935b3039a6437d4e41a9cd7","isMergeCommit":false,"messageTitle":"Edit for build-and-check Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":30},"test-code":{"insertions":9,"deletions":7}}},{"hash":"1c3dba0cc588f9746f2a6706955df611cf1dac8c","isMergeCommit":false,"messageTitle":"Edit 2 for build-and-check Gradle (add new line at the end of the file)","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"7103ecb9071ddb693815469edc4a98c724696ce3","isMergeCommit":false,"messageTitle":"Edit 3 for build-and-check Gradle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"28c461ff31ca243dacb48ca80caca708351319c5","isMergeCommit":true,"messageTitle":"Merge pull request #13 from janelleenqi/branch-left-command","messageBody":"Add Left Command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"4dad4e47e3274967b37f8fdf9168819dc7d8c360","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"ee22092cdb466e755f74b1d931009faf2a8450a3","isMergeCommit":false,"messageTitle":"Reorganise files in directory","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"other":{"insertions":1,"deletions":1},"test-code":{"insertions":2,"deletions":1}}},{"hash":"4bb7e1ca9fd650a59260929e471b6fdcc5cf9ae8","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"86a67bc781962dfebf96ff33220836d88f56949d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-shift-file","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"844497020cb6212656e880719bbbd03584f59310","isMergeCommit":false,"messageTitle":"Assertions Enabled in the build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":1}}},{"hash":"8fe8d35becdda7684f96ce0a750afda64d581a87","isMergeCommit":false,"messageTitle":"Add assertions to ModuleList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"634977a79898a14c9da7a96127606077f40d63f6","isMergeCommit":false,"messageTitle":"Update DeveloperGuide for Left","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":34,"deletions":8}}},{"hash":"71a99acc2f14adcb21441720314b3036f25b8db3","isMergeCommit":false,"messageTitle":"Fixes #10, fixes #33","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a4358197e7e9da71f5b3a7cce3beb7eabcd57224","isMergeCommit":true,"messageTitle":"Merge pull request #34 from janelleenqi/branch-ensure-project-deliverables","messageBody":"Add assertions, Update Developer Guide","fileTypesAndContributionMap":{}}]}],"rohitcube":[{"date":"2023-10-07","commitResults":[{"hash":"a705965a345d0fb777a8268c24a02cb95f3c7009","isMergeCommit":false,"messageTitle":"added profile - rohit","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-09","commitResults":[{"hash":"67dfcdb437ce0cff8d2449ca49a32c15acb77cd7","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"526e6983d8cb279b409a14132ce402926860616a","isMergeCommit":true,"messageTitle":"Merge pull request #6 from rohitcube/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"abbb47faf32f9201108d53c0b360b528451fdc81","isMergeCommit":false,"messageTitle":"Added API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":110,"deletions":1},"other":{"insertions":1,"deletions":0},"test-code":{"insertions":19,"deletions":0}}},{"hash":"3295f1687ef050ad59ed4739c2bbb84b0b40cbf1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e6920151453fa8acfaef5a9c2c94aaf1a4288172","isMergeCommit":true,"messageTitle":"Fixed unresolved merge","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4bbac7ecc89de2ea1f18a0b3fe5aa5e1bc4f2265","isMergeCommit":false,"messageTitle":"Add API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"6cd6c37ead68c4b389fb5c88296604599be37272","isMergeCommit":true,"messageTitle":"Add API class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06e8865dc23823bff453a73e8ecfa52fffea2b1e","isMergeCommit":false,"messageTitle":"Add API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-19","commitResults":[{"hash":"3127654c68e3fcba58f73ccccf5737502ee90421","isMergeCommit":false,"messageTitle":"Fix indentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":78},"test-code":{"insertions":0,"deletions":4}}},{"hash":"dca72b7be67ea4541f4246de06a127116d3f8d54","isMergeCommit":true,"messageTitle":"Merge CompletePreqs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f58efff20a7620a2b3490ea0e2d2d10cd90a3b67","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-4:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3858e4f65cfdeeeb9619b94b7bc63b076bba9f71","isMergeCommit":false,"messageTitle":"Fix CheckstyleMain","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":9},"test-code":{"insertions":9,"deletions":8}}},{"hash":"048fcd3aceef10dca2c3f33158706897d68b3bab","isMergeCommit":false,"messageTitle":"Remove API Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":102},"test-code":{"insertions":0,"deletions":16}}},{"hash":"fde33ba4b836e32a85c0f5125f315203cbbba6c6","isMergeCommit":true,"messageTitle":"Merge pull request #23 from rohitcube/branch-AddAPIClass","messageBody":"Remove API Class","tags":["v0.1"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"b2440a2441f95ea27fb2d5a8ea2804c3189bc3a9","isMergeCommit":false,"messageTitle":"Add API Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":0},"test-code":{"insertions":51,"deletions":0}}},{"hash":"a74c4c143857f517b7518f354aa339e5b90c9eb6","isMergeCommit":false,"messageTitle":"Add API Class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"43d67d6a9cb7a1e38683a3f6edd3f56b9c49baa1","isMergeCommit":true,"messageTitle":"Merge pull request #35 from rohitcube/Add-API-class-and-parser","messageBody":"Add API class and functions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"6dcec60b621b4f3a3b9e66fbf1c5318b5201e3f7","isMergeCommit":false,"messageTitle":"Add functions that return json to API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":4},"test-code":{"insertions":0,"deletions":1}}},{"hash":"c4b9c1f6be1164dc52cef97da20ee323e347d0e4","isMergeCommit":false,"messageTitle":"Deleted \u0027info\u0027 command from module controller","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":11}}},{"hash":"ff4016383cf24bb5d6c682ea99fd9fd321149ad6","isMergeCommit":true,"messageTitle":"Merge pull request #40 from rohitcube/rohit/fix/add-json-functions-to-api-class","messageBody":"Rohit/fix/add json functions to api class","fileTypesAndContributionMap":{}}]}],"CerIsaiah":[{"date":"2023-10-08","commitResults":[{"hash":"d6daf466c3aae14881d7203cec549477dda5aca9","isMergeCommit":false,"messageTitle":"Add photo and aboutUs information","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"621e25c4f695763044e239140052377d8211fa05","isMergeCommit":true,"messageTitle":"Add aboutUs information","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"1e56807ba29080daddc8d8d177aa0110c772c699","isMergeCommit":false,"messageTitle":"Fixed merge conflicts with about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2023-10-18","commitResults":[{"hash":"5c7739cc63dfdba986b90ce2f2fcce5c0683a2b2","isMergeCommit":false,"messageTitle":"Add the complete class command to mark when a class is complete","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":165,"deletions":3}}},{"hash":"e39a5de84acff43f9364ed22ee1dda158fca3ecf","isMergeCommit":true,"messageTitle":"Merge major and complete commands","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"348b3da8aa36d1612001cf37da34c02482855c12","isMergeCommit":false,"messageTitle":"Fix merge tests conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":1},"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-25","commitResults":[{"hash":"1cb45d2901f18782158ee8871e09adb98caee588","isMergeCommit":false,"messageTitle":"fix complete feature bugs and optimized features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":9}}},{"hash":"4a6d6f64b8e288c9ff071bb39982f18ab1824149","isMergeCommit":true,"messageTitle":"Merge pull request #38 from CerIsaiah/bug-completefeature","messageBody":"fix complete feature bugs and optimized features","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SebasFok":{"docs":51,"functional-code":69,"test-code":35},"ryanlohyr":{"docs":20,"functional-code":463,"test-code":110},"janelleenqi":{"docs":41,"functional-code":110,"test-code":119,"other":1},"rohitcube":{"docs":0,"functional-code":58,"test-code":0,"other":1},"CerIsaiah":{"docs":6,"functional-code":215,"test-code":1}},"authorContributionVariance":{"SebasFok":756.12854,"ryanlohyr":6213.1133,"janelleenqi":5893.453,"rohitcube":3096.9536,"CerIsaiah":828.4441},"authorDisplayNameMap":{"SebasFok":"CS2113-T17-4 SEBA..HUNG","ryanlohyr":"CS2113-T17-4 RYAN.. RUI","janelleenqi":"CS2113-T17-4 LIOW..ELLE","rohitcube":"CS2113-T17-4 ROHI..THAN","CerIsaiah":"CS2113-T17-4 CERV..DEAN"}} +{"authorDailyContributionsMap":{"SebasFok":[{"date":"2023-10-05","commitResults":[{"hash":"aeef6fad05b0f6d0f0c354e9db79ba3ecbdfbef9","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-06","commitResults":[{"hash":"2039386c7d8e661b4e7bf66f1d4fa3ea80da23ac","isMergeCommit":false,"messageTitle":"Add AboutUs information for Sebastian","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}}]},{"date":"2023-10-07","commitResults":[{"hash":"de8365c98e9274e9c7b40228f5c687bbb7774a2e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"a728f005673371e58b95131d45ece32ea30c5cf6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from janelleenqi/branch-Edit-AboutUs-v1","messageBody":"janelleenqi-AboutUs","fileTypesAndContributionMap":{}},{"hash":"a53713ffad1e3c43fb6821740bbbae2f0b934975","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2336e0f03aede437eefc987d98349c05b02aecc3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5677d80546a6e55ae3fc9b3c2f9efc6cc36ddfbc","isMergeCommit":true,"messageTitle":"Merge pull request #5 from ryanlohyr/master","messageBody":"Ryanlohyr-AboutUs","fileTypesAndContributionMap":{}},{"hash":"f10394ae22fddfcc20621826cb53a03dd516d990","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-4/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"0d840309811b905770039ac8ee89b6c803eb14ee","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9c3ef1f3c1cd7136c584fdbcd2b00be6f53e8069","isMergeCommit":false,"messageTitle":"Fix AboutUs page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"d97257fe38507e38b90b874e965ec94cc6b5c00a","isMergeCommit":false,"messageTitle":"Revert \"Fix AboutUs page\"","messageBody":"This reverts commit 9c3ef1f3c1cd7136c584fdbcd2b00be6f53e8069.\n","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"d0a5cf6d3dab23e3ab691ed2f8a77ddb0e301864","isMergeCommit":false,"messageTitle":"Fix AboutUs page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"a6429ace4f7089682cc2c231fd5a974b2abacea8","isMergeCommit":true,"messageTitle":"Merge pull request #8 from SebasFok/branch-FixAboutUs","messageBody":"Fix about us page","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"be9eda9ae041c25d60d33065384ebbafb11b421b","isMergeCommit":false,"messageTitle":"Add student class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"f37c8d8033f4f5340abf8af3f6cfee7194242bee","isMergeCommit":false,"messageTitle":"Add \"major\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"2ed39fab10850f7beac9b1dea7710dab4ee3b966","isMergeCommit":false,"messageTitle":"Add enum for majors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":8}}},{"hash":"a777fd584c0ae40bcd4d764c056dde18112af52d","isMergeCommit":false,"messageTitle":"Add tests for \u0027updateMajor\u0027 function","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":26,"deletions":0}}},{"hash":"88ac029553890db8c4945a2fd9d5dce17ff67011","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"20e6817a7cccc59b82ffed3fccf09a44a67b767c","isMergeCommit":true,"messageTitle":"Merge pull request #16 from SebasFok/branch-SelectMajor","messageBody":"Add major feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"f8bdc1bbed8355ad7010bcf3a1dfe6a49b2ac42d","isMergeCommit":false,"messageTitle":"Fix Major command bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":11},"test-code":{"insertions":34,"deletions":24}}},{"hash":"1fd6f85f957f1380b71520ff1ccca4efea83951c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into SebasFok-FixMajor","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/duke/controllers/ModulePlannerControllerTest.java\n","fileTypesAndContributionMap":{}},{"hash":"7ef09a89be73ba92a5b1c84aa9bb8ed37f8681d0","isMergeCommit":false,"messageTitle":"Fix CheckStyle Issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"d98977a14d7f4b3d2de12892a24cd09b46fc462d","isMergeCommit":true,"messageTitle":"Merge pull request #36 from SebasFok/SebasFok-FixMajor","messageBody":"Fix major bugs","fileTypesAndContributionMap":{}},{"hash":"f179c1478f01690019185e566c6739999e30a483","isMergeCommit":false,"messageTitle":"Create Developer Guide for Major feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":38,"deletions":0}}},{"hash":"f2b9bf9248cc0a203e4a62ab5303f80e85729dad","isMergeCommit":true,"messageTitle":"Merge pull request #37 from SebasFok/SebasFok-DGForMajorFeature","messageBody":"Create Developer Guide for Major feature","fileTypesAndContributionMap":{}}]}],"ryanlohyr":[{"date":"2023-10-07","commitResults":[{"hash":"a04733a9b91f0436d9e7599a9dbe7438aa6089a5","isMergeCommit":false,"messageTitle":"Update ryan portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-12","commitResults":[{"hash":"f7df8565f0f1c09b3e97078aa0914ec8c8beb51e","isMergeCommit":false,"messageTitle":"create project base layout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":12}}},{"hash":"448ac15a82ee8f25745d15ad226d9a5dd0f6bc55","isMergeCommit":false,"messageTitle":"Create base project layout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":12}}},{"hash":"9bddadace6b3fe56ea34260bfbf808a576b7e336","isMergeCommit":false,"messageTitle":"Revert \"Create base project layout\"","messageBody":"This reverts commit 448ac15a82ee8f25745d15ad226d9a5dd0f6bc55.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":66}}},{"hash":"5cb0e57054f2e47ba0c944876577e4b36e3cb793","isMergeCommit":true,"messageTitle":"Merge branch \u0027ryan-createLayout\u0027 of https://github.com/ryanlohyr/tp into ryan-createLayout","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"de707c380d524d5b537fa700b0bd3337eb46c778","isMergeCommit":false,"messageTitle":"Fix test bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"52772484e68d1498e236d83c230d6226cc9b0dc3","isMergeCommit":true,"messageTitle":"Merge pull request #7 from ryanlohyr/ryan-createLayout","messageBody":"Create project base layout","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"813fa09444c9155f79f736faadd281e068a13fe7","isMergeCommit":false,"messageTitle":"Add pace feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":4,"deletions":0}}},{"hash":"92685f4a8354d7c9339df54862e8ad730875ae31","isMergeCommit":false,"messageTitle":"Add pace feature v2","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":88,"deletions":3},"test-code":{"insertions":86,"deletions":3}}},{"hash":"e4f352e491e6bee1e281a3aeac2b5cbec16e50ce","isMergeCommit":false,"messageTitle":"fix window os bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":16},"test-code":{"insertions":2,"deletions":4}}},{"hash":"ab09a619ac2be800ae064c73f1b41ce734c8f64b","isMergeCommit":true,"messageTitle":"Merge pull request #9 from ryanlohyr/ryan-paceFeature","messageBody":"Add pace feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"22c9f54fa9950fed39f4313ac4569cfa59a40694","isMergeCommit":false,"messageTitle":"add pace feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":18}}},{"hash":"d3fc98e585ca694c04d379ebc953ff02c874042a","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ryanlohyr/ryan-paceFeature","messageBody":"add pace feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"c12b196537f7101680d6b70f81d40496e13cb010","isMergeCommit":false,"messageTitle":"fix format bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":79}}},{"hash":"7b5a888b1c9c716564aee6458077499f76f301ab","isMergeCommit":true,"messageTitle":"fix test bug","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0e0f7bfab9fd4d4c361e5a315b233c8e07248f71","isMergeCommit":true,"messageTitle":"Merge pull request #22 from ryanlohyr/master","messageBody":"fix formatting and unit test bug","fileTypesAndContributionMap":{}},{"hash":"94d07e6718756e5e3ca942fe01955a4ba192be5c","isMergeCommit":true,"messageTitle":"Merge pull request #21 from rohitcube/master","messageBody":"Add API class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"b36f87967ffacbc039d25221df0214ffb7ec9530","isMergeCommit":false,"messageTitle":"Create developer guide for pace feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2},"other":{"insertions":1,"deletions":1},"docs":{"insertions":28,"deletions":0},"test-code":{"insertions":2,"deletions":1}}},{"hash":"ff1fed86da7619c2faa142dc10f0a5c93da3f6e7","isMergeCommit":true,"messageTitle":"Merge pull request #27 from ryanlohyr/ryan/developer-guide","messageBody":"Create developer guide for pace feature","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"bd43a06ecf5d38a83e18e921c2b2471b97d790f3","isMergeCommit":false,"messageTitle":"Fix repo structure and api mods issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":10},"other":{"insertions":6,"deletions":9},"test-code":{"insertions":4,"deletions":3}}},{"hash":"71fc4612770b0946010116462f06af6ebe347f79","isMergeCommit":true,"messageTitle":"Merge pull request #41 from ryanlohyr/ryan/fix/repo-structure","messageBody":"Fix repo structure and api mods issue","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"472947849c656b0915df4c8752e547ff55cbb61b","isMergeCommit":false,"messageTitle":"Restructure project and add prerequisite function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":242,"deletions":35},"test-code":{"insertions":22,"deletions":50}}},{"hash":"d28259e7dc130809d475536cfcad9c14f94ae623","isMergeCommit":true,"messageTitle":"Merge pull request #42 from ryanlohyr/ryan/feat/prerequisite","messageBody":"Restructure project and add prerequisite function","fileTypesAndContributionMap":{}}]}],"janelleenqi":[{"date":"2023-10-07","commitResults":[{"hash":"b8e95e351ff1f9e8058d1fa4512b9fed2a801ff5","isMergeCommit":true,"messageTitle":"Merge pull request #1 from SebasFok/SebasFok-AboutUs","messageBody":"Add AboutUs information for Sebastian","fileTypesAndContributionMap":{}},{"hash":"215bbf707ba73e12fe4a3852bd195add31b9563b","isMergeCommit":false,"messageTitle":"Edit AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"20248cfdb579d3a65dba6b00480f73fd6818e9de","isMergeCommit":true,"messageTitle":"Merge pull request #3 from rohitcube/master","messageBody":"added profile - rohit","fileTypesAndContributionMap":{}},{"hash":"320cf1073f08efaeb681a28d2a71a2c05d03f61a","isMergeCommit":false,"messageTitle":"Edit AboutUs.md to include github","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"eeadb9d732a337b8cd7c73ed135d8d5aabf3ba2e","isMergeCommit":true,"messageTitle":"Merge AboutUs.md","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"e9a420df1a3a38da09d884a238231f1d151f3f37","isMergeCommit":false,"messageTitle":"add \"left\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":97,"deletions":22}}},{"hash":"d61cfbec5c631f4536a0498f84b53a469717b7a9","isMergeCommit":false,"messageTitle":"delete unnecessary lines","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"9fec7539e4da6bde4964b8bb37ea3827706ac546","isMergeCommit":false,"messageTitle":"add ModuleListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":44,"deletions":0}}},{"hash":"22d2823da7d4c2553ed68abf4765cc2f69476943","isMergeCommit":false,"messageTitle":"add listModulesLeftTest for successful scenario in ModulePlannerControllerTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":20,"deletions":0}}},{"hash":"c14bd0e9753371612f42b4a7653b130eedb55459","isMergeCommit":false,"messageTitle":"add existsTest for successful scenarios in ModuleListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":2}}},{"hash":"fe408d5d36d769ff7ccd93af2aa871dbb174bc36","isMergeCommit":false,"messageTitle":"add some exception handling for ModuleList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":14}}},{"hash":"fff60307f1c5bdb366bcd603e5b712359400b076","isMergeCommit":false,"messageTitle":"add failure scenarios for existsTest and getDifferenceTest in ModuleListTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":8},"test-code":{"insertions":30,"deletions":7}}},{"hash":"21c26955eebadc657445a51c384758035a3bde48","isMergeCommit":false,"messageTitle":"add javadoc comments for functions in the \"left\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":0}}},{"hash":"8789c06c3791750c5fd338706ea328ffb9040de7","isMergeCommit":false,"messageTitle":"Add success scenario where mainModuleList is empty for existsTest for ModuleListTest. This closes #10","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":16},"test-code":{"insertions":11,"deletions":0}}},{"hash":"bd71200339e77f407935b3039a6437d4e41a9cd7","isMergeCommit":false,"messageTitle":"Edit for build-and-check Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":30},"test-code":{"insertions":9,"deletions":7}}},{"hash":"1c3dba0cc588f9746f2a6706955df611cf1dac8c","isMergeCommit":false,"messageTitle":"Edit 2 for build-and-check Gradle (add new line at the end of the file)","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"7103ecb9071ddb693815469edc4a98c724696ce3","isMergeCommit":false,"messageTitle":"Edit 3 for build-and-check Gradle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"28c461ff31ca243dacb48ca80caca708351319c5","isMergeCommit":true,"messageTitle":"Merge pull request #13 from janelleenqi/branch-left-command","messageBody":"Add Left Command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"4dad4e47e3274967b37f8fdf9168819dc7d8c360","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"ee22092cdb466e755f74b1d931009faf2a8450a3","isMergeCommit":false,"messageTitle":"Reorganise files in directory","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"other":{"insertions":1,"deletions":1},"test-code":{"insertions":2,"deletions":1}}},{"hash":"4bb7e1ca9fd650a59260929e471b6fdcc5cf9ae8","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"86a67bc781962dfebf96ff33220836d88f56949d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-shift-file","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"844497020cb6212656e880719bbbd03584f59310","isMergeCommit":false,"messageTitle":"Assertions Enabled in the build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":1}}},{"hash":"8fe8d35becdda7684f96ce0a750afda64d581a87","isMergeCommit":false,"messageTitle":"Add assertions to ModuleList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"634977a79898a14c9da7a96127606077f40d63f6","isMergeCommit":false,"messageTitle":"Update DeveloperGuide for Left","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":34,"deletions":8}}},{"hash":"71a99acc2f14adcb21441720314b3036f25b8db3","isMergeCommit":false,"messageTitle":"Fixes #10, fixes #33","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a4358197e7e9da71f5b3a7cce3beb7eabcd57224","isMergeCommit":true,"messageTitle":"Merge pull request #34 from janelleenqi/branch-ensure-project-deliverables","messageBody":"Add assertions, Update Developer Guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"b9fac348cbba2fe6641b522779774367f60831de","isMergeCommit":false,"messageTitle":"Update getRequirements to get only module codes from full CEGRequirements.txt","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":1}}},{"hash":"449948670f2fb2639a341e9afc3dbb1d1699d626","isMergeCommit":false,"messageTitle":"Add skeleton of \"required\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":50,"deletions":8}}}]},{"date":"2023-10-29","commitResults":[{"hash":"67ba22e5c71002d4c29b71c0e9bc4aa7e1c8f176","isMergeCommit":false,"messageTitle":"Show half table","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":1}}},{"hash":"a457e05e8264244efecf3d6ea200b01d860c35a1","isMergeCommit":false,"messageTitle":"Complete simple formatting for \"required\" feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":41}}},{"hash":"0dcce0323d8643c7a55fcfe68a49bb214cd8cacc","isMergeCommit":false,"messageTitle":"add \"required\" feature for the major \"CS\"","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"18be58c5dbf0b09b3bb9857962bd2280647d269c","isMergeCommit":false,"messageTitle":"fix formatting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":41}}},{"hash":"1faae023633cccdbcfc83c9a94571c4ce4e45f12","isMergeCommit":false,"messageTitle":"extract getLongestStringLength(File f)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":18}}},{"hash":"c05f39be85d642b4f2a36be9ee52c10f29533ab7","isMergeCommit":false,"messageTitle":"Add javadoc comments for DataRepository.java and CommandLineView.java Fixes #32","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":13}}},{"hash":"12fd2b79dbf99a1a8a651b64d25f9fb6181b4fb4","isMergeCommit":false,"messageTitle":"Attempt 1 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"e2871c016b80321b3234435cc5974b8129f695c9","isMergeCommit":false,"messageTitle":"Attempt 2 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"eea92354de414fdad713768272e01cfdce39024e","isMergeCommit":false,"messageTitle":"Attempt 3 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"254e7224502763d17b0a1c66d8e6515a1a8a1e84","isMergeCommit":false,"messageTitle":"Attempt 4 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"1ffc685b47a7f14c4b49644b8b3db652af1b0510","isMergeCommit":false,"messageTitle":"Attempt 5 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"f0a922ee6e36aba351cdef5d26c728ad822b153a","isMergeCommit":false,"messageTitle":"Attempt 6 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"9ce59a225b8d020f0c5382d2b1df7d3a1b5e2dbb","isMergeCommit":false,"messageTitle":"Attempt 7 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"d1d510937b71872b8a2b0811da87577be201e34b","isMergeCommit":false,"messageTitle":"Attempt 8 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"c2e9b4592b7961585605487af164075e734256d9","isMergeCommit":false,"messageTitle":"Attempt 9 of fixing unicode problems","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"206bda85747cccf85dd05ad738bd880a6e1470b9","isMergeCommit":false,"messageTitle":"Fixes #32","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"01ac435a7756ed81d1085a174bf4719f2805934e","isMergeCommit":true,"messageTitle":"Merge pull request #43 from janelleenqi/Janelle/feature/required-modules","messageBody":"Add feature \"required\"","fileTypesAndContributionMap":{}}]}],"rohitcube":[{"date":"2023-10-07","commitResults":[{"hash":"a705965a345d0fb777a8268c24a02cb95f3c7009","isMergeCommit":false,"messageTitle":"added profile - rohit","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-09","commitResults":[{"hash":"67dfcdb437ce0cff8d2449ca49a32c15acb77cd7","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"526e6983d8cb279b409a14132ce402926860616a","isMergeCommit":true,"messageTitle":"Merge pull request #6 from rohitcube/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"abbb47faf32f9201108d53c0b360b528451fdc81","isMergeCommit":false,"messageTitle":"Added API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":110,"deletions":1},"other":{"insertions":1,"deletions":0},"test-code":{"insertions":19,"deletions":0}}},{"hash":"3295f1687ef050ad59ed4739c2bbb84b0b40cbf1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e6920151453fa8acfaef5a9c2c94aaf1a4288172","isMergeCommit":true,"messageTitle":"Fixed unresolved merge","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4bbac7ecc89de2ea1f18a0b3fe5aa5e1bc4f2265","isMergeCommit":false,"messageTitle":"Add API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"6cd6c37ead68c4b389fb5c88296604599be37272","isMergeCommit":true,"messageTitle":"Add API class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"06e8865dc23823bff453a73e8ecfa52fffea2b1e","isMergeCommit":false,"messageTitle":"Add API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-19","commitResults":[{"hash":"3127654c68e3fcba58f73ccccf5737502ee90421","isMergeCommit":false,"messageTitle":"Fix indentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":78},"test-code":{"insertions":0,"deletions":4}}},{"hash":"dca72b7be67ea4541f4246de06a127116d3f8d54","isMergeCommit":true,"messageTitle":"Merge CompletePreqs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f58efff20a7620a2b3490ea0e2d2d10cd90a3b67","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-T17-4:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3858e4f65cfdeeeb9619b94b7bc63b076bba9f71","isMergeCommit":false,"messageTitle":"Fix CheckstyleMain","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":9},"test-code":{"insertions":9,"deletions":8}}},{"hash":"048fcd3aceef10dca2c3f33158706897d68b3bab","isMergeCommit":false,"messageTitle":"Remove API Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":102},"test-code":{"insertions":0,"deletions":16}}},{"hash":"fde33ba4b836e32a85c0f5125f315203cbbba6c6","isMergeCommit":true,"messageTitle":"Merge pull request #23 from rohitcube/branch-AddAPIClass","messageBody":"Remove API Class","tags":["v0.1"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"b2440a2441f95ea27fb2d5a8ea2804c3189bc3a9","isMergeCommit":false,"messageTitle":"Add API Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":0},"test-code":{"insertions":51,"deletions":0}}},{"hash":"a74c4c143857f517b7518f354aa339e5b90c9eb6","isMergeCommit":false,"messageTitle":"Add API Class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"43d67d6a9cb7a1e38683a3f6edd3f56b9c49baa1","isMergeCommit":true,"messageTitle":"Merge pull request #35 from rohitcube/Add-API-class-and-parser","messageBody":"Add API class and functions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"6dcec60b621b4f3a3b9e66fbf1c5318b5201e3f7","isMergeCommit":false,"messageTitle":"Add functions that return json to API class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":4},"test-code":{"insertions":0,"deletions":1}}},{"hash":"c4b9c1f6be1164dc52cef97da20ee323e347d0e4","isMergeCommit":false,"messageTitle":"Deleted \u0027info\u0027 command from module controller","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":11}}},{"hash":"ff4016383cf24bb5d6c682ea99fd9fd321149ad6","isMergeCommit":true,"messageTitle":"Merge pull request #40 from rohitcube/rohit/fix/add-json-functions-to-api-class","messageBody":"Rohit/fix/add json functions to api class","fileTypesAndContributionMap":{}}]}],"CerIsaiah":[{"date":"2023-10-08","commitResults":[{"hash":"d6daf466c3aae14881d7203cec549477dda5aca9","isMergeCommit":false,"messageTitle":"Add photo and aboutUs information","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"621e25c4f695763044e239140052377d8211fa05","isMergeCommit":true,"messageTitle":"Add aboutUs information","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"1e56807ba29080daddc8d8d177aa0110c772c699","isMergeCommit":false,"messageTitle":"Fixed merge conflicts with about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2023-10-18","commitResults":[{"hash":"5c7739cc63dfdba986b90ce2f2fcce5c0683a2b2","isMergeCommit":false,"messageTitle":"Add the complete class command to mark when a class is complete","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":165,"deletions":3}}},{"hash":"e39a5de84acff43f9364ed22ee1dda158fca3ecf","isMergeCommit":true,"messageTitle":"Merge major and complete commands","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"348b3da8aa36d1612001cf37da34c02482855c12","isMergeCommit":false,"messageTitle":"Fix merge tests conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":1},"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-25","commitResults":[{"hash":"1cb45d2901f18782158ee8871e09adb98caee588","isMergeCommit":false,"messageTitle":"fix complete feature bugs and optimized features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":9}}},{"hash":"4a6d6f64b8e288c9ff071bb39982f18ab1824149","isMergeCommit":true,"messageTitle":"Merge pull request #38 from CerIsaiah/bug-completefeature","messageBody":"fix complete feature bugs and optimized features","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SebasFok":{"docs":51,"functional-code":68,"test-code":35},"ryanlohyr":{"docs":20,"functional-code":456,"test-code":110},"janelleenqi":{"docs":41,"functional-code":281,"test-code":119,"other":1},"rohitcube":{"docs":0,"functional-code":58,"test-code":0,"other":1},"CerIsaiah":{"docs":6,"functional-code":215,"test-code":1}},"authorContributionVariance":{"SebasFok":737.90375,"ryanlohyr":6073.384,"janelleenqi":9009.707,"rohitcube":3022.6257,"CerIsaiah":808.1418},"authorDisplayNameMap":{"SebasFok":"CS2113-T17-4 SEBA..HUNG","ryanlohyr":"CS2113-T17-4 RYAN.. RUI","janelleenqi":"CS2113-T17-4 LIOW..ELLE","rohitcube":"CS2113-T17-4 ROHI..THAN","CerIsaiah":"CS2113-T17-4 CERV..DEAN"}} diff --git a/AY2324S1-CS2113-T18-2_tp_master/authorship.json b/AY2324S1-CS2113-T18-2_tp_master/authorship.json index ddec789..1b397b5 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/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":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"**Xchart (A Simple Charting Library for Java)**","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"- author: KNOWN","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"- source: https://knowm.org/open-source/xchart/","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"**JSON Simple (simple Java toolkit for encoding and decoding JSON)**","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"- author: Yidong Fang (Google Code)","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"- source: https://code.google.com/archive/p/json-simple/","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"**Apache Common Langs 3**","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"- author: Apache Commons","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"- source: https://commons.apache.org/proper/commons-lang/","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"**Alpha Vantage Stock Market API**","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"- author: Alpha Vantage","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"- source: https://www.alphavantage.co/","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"**round() method in Cashflow.java**","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" - author: mhadidg","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" - source: https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":"**capitalize() method in Cashflow.java**","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" - author: Nick Bolton","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" - source: https://stackoverflow.com/questions/1892765/how-to-capitalize-the-first-character-of-each-word-in-a-string","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":"**DG adapted from**","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"* [Addressbook-level3](https://github.com/se-edu/addressbook-level3)","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"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":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"### Storage Component","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"API: `Storage.java`","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":"![](images/Storage.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"* The storage component loads data from the saved text files when the application starts, and saves the data to the","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" text files when the application exits.","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"* The storage class uses the static methods in LoadData and SaveData to load and save data respectively.","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"* The `load` method in LoadData reads the `data.txt` file and loads any existing Income, Expense and Budget into the application.","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"* The `save` method in SaveData saves all Incomes, Expenses and existing Budget into the `data.txt` file.","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"#### Design considerations:","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":"* There are 2 main ways to implement the storage, one is to save the data after every command, and the other is to save ","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":"the data one upon exiting the program with the `exit` command.","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"* Saving the data once upon exit (Currently implemented):","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" * Advantage: Better efficiency and performance of the program.","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" * Disadvantage: If the program crashes or exits incorrectly, data will not be saved.","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":"* Saving the data after every command:","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" * Advantage: Changes are saved after every command.","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" * Disadvantage: Executing command might slow down the program when there is a large amount of data to be saved.","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":"### Visualization Feature ","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":"This feature is implemented with the help of [XChart](https://knowm.org/open-source/xchart/), a simple charting library for Java by Knowm.","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":"By typing in the vis command with the appropriate arguments (/s and /t), users will be able to visualize their income or expense ","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":"using visualization tools (Piechart, Bar Chart)","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":"Demo: ","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":"`vis /t expense /c pie`","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":"Output","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":"`Displaying piechart for expense`","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":"A message will be shown telling you that the chart is being displayed","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visOutput.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":"This feature was implemented with the help of three different classes.","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":"They are namely: Visualizer, Categorizer, VisCommand (Inherits from abstract Command Class)","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":"VisCommand\u0027s Role: ","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":"1) Read the parameters of the vis command entered by the user","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":"- `/t` Reads the type of cashflow that the user wants to visualize (income/expense)","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":"- `/c` Reads the type of visualization tools the user wants (piechart/barchart)","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":"2) Calls the Cateorgizer to sort cashflow (Income/Expense) according to type","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":"3) Calls the Visualizer to display the chart to the user","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":"Categorizer\u0027s Role: ","lastModifiedDate":"2023-10-24"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":"According to the cashflow type (Income/Expense) arugment passed in, the Categorizer sorts the ","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":"specified cashflow entry according to type using a Hashmap which is returned and used by the Visualizer","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":"Visualizer\u0027s Role: ","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":"According to the chart type (Pie/Bar) argument and the Hashmap obtained from the categorizer passed in, ","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":"the visualizer displays the specified visualization chart by calling the charting library Xchart.","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"wwweert123"},"content":"### Class Diagram","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visualisationClass.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":"### Sequence Diagram ","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"wwweert123"},"content":"Overall ","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visualisationSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"wwweert123"},"content":"Categorizer","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":"![](images/vis/categorizerSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"wwweert123"},"content":"Visualizer","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visualizerSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":"### Add income/expense feature","lastModifiedDate":"2023-10-24"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":"The add income/expense command has 2 compulsory arguments `/t` and `/a` and 1 optional argument `/r`.","lastModifiedDate":"2023-10-24"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":"Example:","lastModifiedDate":"2023-10-24"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":"add income /a 100 /t salary /r 30","lastModifiedDate":"2023-10-24"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":128,"author":{"gitId":"NeoMinWei"},"content":"Below are the steps that shows the implementation of add income/expense.","lastModifiedDate":"2023-10-24"},{"lineNumber":129,"author":{"gitId":"NeoMinWei"},"content":"#### Step 1","lastModifiedDate":"2023-10-24"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":"An instantiated AddCashflowCommand class gets the instance of CashflowList.","lastModifiedDate":"2023-10-24"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":132,"author":{"gitId":"NeoMinWei"},"content":"This allows the AddCashflowCommand instance to access the methods of CashflowList.","lastModifiedDate":"2023-10-24"},{"lineNumber":133,"author":{"gitId":"NeoMinWei"},"content":"#### Step 2","lastModifiedDate":"2023-10-24"},{"lineNumber":134,"author":{"gitId":"NeoMinWei"},"content":"The AddCashflowCommand instance then calls addIncome() or addExpense(), depending on what `category` is initialised as.","lastModifiedDate":"2023-10-24"},{"lineNumber":135,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":136,"author":{"gitId":"NeoMinWei"},"content":"addIncome() or addExpense() instantiates an Income or Expense object respectively.","lastModifiedDate":"2023-10-24"},{"lineNumber":137,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":"Example:","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"NeoMinWei"},"content":"switch (category) {","lastModifiedDate":"2023-10-24"},{"lineNumber":141,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addIncome(amount, incomeType, recur);","lastModifiedDate":"2023-10-24"},{"lineNumber":143,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-24"},{"lineNumber":145,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addExpense(amount, expenseType, recur);","lastModifiedDate":"2023-10-24"},{"lineNumber":146,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":147,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-24"},{"lineNumber":148,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-24"},{"lineNumber":149,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":150,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":151,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":152,"author":{"gitId":"NeoMinWei"},"content":"#### Step 3","lastModifiedDate":"2023-10-24"},{"lineNumber":153,"author":{"gitId":"NeoMinWei"},"content":"The instantiated income/expense then updates the overall balance through addIncomeValue() or addExpenseValue().","lastModifiedDate":"2023-10-24"},{"lineNumber":154,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":155,"author":{"gitId":"NeoMinWei"},"content":"The income/expense object is also added to the list in Cashflowlist which contains all incomes/expenses.","lastModifiedDate":"2023-10-24"},{"lineNumber":156,"author":{"gitId":"NeoMinWei"},"content":"#### Step 4","lastModifiedDate":"2023-10-24"},{"lineNumber":157,"author":{"gitId":"NeoMinWei"},"content":"The added income/expense is then displayed to the user through the Ui.","lastModifiedDate":"2023-10-24"},{"lineNumber":158,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":159,"author":{"gitId":"NeoMinWei"},"content":"#### Diagrams","lastModifiedDate":"2023-10-24"},{"lineNumber":160,"author":{"gitId":"NeoMinWei"},"content":"Given below is the class diagram showing the class structure of the add income/expense mechanism:","lastModifiedDate":"2023-10-24"},{"lineNumber":161,"author":{"gitId":"NeoMinWei"},"content":"![](images/CashflowClassDiagram.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":163,"author":{"gitId":"NeoMinWei"},"content":"Given below is the sequence diagram showing the add income/expense mechanism:","lastModifiedDate":"2023-10-24"},{"lineNumber":164,"author":{"gitId":"NeoMinWei"},"content":"![](images/AddCashflowSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"ryan1604"},"content":"### Budget Feature","lastModifiedDate":"2023-10-24"},{"lineNumber":168,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"ryan1604"},"content":"This feature has 5 functions, `set`, `update`, `delete`, `reset`, and `view`.","lastModifiedDate":"2023-10-24"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":171,"author":{"gitId":"ryan1604"},"content":"![](images/Budget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":172,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":173,"author":{"gitId":"ryan1604"},"content":"The BudgetCommand will execute the appropriate command and print through `Budget.java` and prints any message to the user through `Ui.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":174,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":175,"author":{"gitId":"ryan1604"},"content":"#### Set and update budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":177,"author":{"gitId":"ryan1604"},"content":"Example:","lastModifiedDate":"2023-10-24"},{"lineNumber":178,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":179,"author":{"gitId":"ryan1604"},"content":"budget set /b 500","lastModifiedDate":"2023-10-24"},{"lineNumber":180,"author":{"gitId":"ryan1604"},"content":"budget update /b 1000","lastModifiedDate":"2023-10-24"},{"lineNumber":181,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":182,"author":{"gitId":"ryan1604"},"content":"The \u0027/b\u0027 is followed by the budget amount. The first line will set the budget by calling `setBudget(500)` method in `Budget.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":183,"author":{"gitId":"ryan1604"},"content":"The second line updates the budget by adding or subtracting the difference between the initial and updated amount to the ","lastModifiedDate":"2023-10-24"},{"lineNumber":184,"author":{"gitId":"ryan1604"},"content":"initial and current budget. This is done through `updateBudget(500)` method in `Budget.java`. Both functions can be seen ","lastModifiedDate":"2023-10-24"},{"lineNumber":185,"author":{"gitId":"ryan1604"},"content":"in the diagram above","lastModifiedDate":"2023-10-24"},{"lineNumber":186,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":187,"author":{"gitId":"ryan1604"},"content":"#### Delete budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":188,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":189,"author":{"gitId":"ryan1604"},"content":"![](images/deleteBudget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":190,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"ryan1604"},"content":"The budget will be deleted by setting the initial and current budget to 0 through the `deleteBudget()` method in `Budget.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":193,"author":{"gitId":"ryan1604"},"content":"Example: `budget delete`","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":195,"author":{"gitId":"ryan1604"},"content":"#### Reset budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":196,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":197,"author":{"gitId":"ryan1604"},"content":"![](images/resetBudget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":198,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":199,"author":{"gitId":"ryan1604"},"content":"The budget will be reset by resetting the current budget to the initial budget through the `resetBudget()` method in `Budget.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":200,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":201,"author":{"gitId":"ryan1604"},"content":"Example: `budget reset`","lastModifiedDate":"2023-10-24"},{"lineNumber":202,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"ryan1604"},"content":"#### View budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":204,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":205,"author":{"gitId":"ryan1604"},"content":"![](images/viewBudget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":206,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":207,"author":{"gitId":"ryan1604"},"content":"The current budget will be shown to the user through the `Ui`.","lastModifiedDate":"2023-10-24"},{"lineNumber":208,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":209,"author":{"gitId":"ryan1604"},"content":"Example: `budget view`","lastModifiedDate":"2023-10-24"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":212,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":213,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":217,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":219,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":221,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":223,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":224,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":225,"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":226,"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":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":228,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":230,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":232,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":234,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":236,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":238,"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":{"wwweert123":71,"NeoMinWei":51,"-":44,"ryan1604":72}},{"path":"docs/Style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T1 #7777DB","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T2 #5252CE","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"NeoMinWei":5}},{"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":"ryan1604"},"content":"## Table of contents","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"* [Introduction](#introduction)","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"* [Quick start](#quick-start)","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"* [Features](#features)","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":" * [Budget](#budget)","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" * [Setting budget](#setting-a-budget-budget-set)","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" * [Updating budget](#updating-budget-budget-update)","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" * [Resetting budget](#resetting-budget-budget-reset)","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" * [Deleting budget](#deleting-budget-budget-delete)","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" * [Viewing budget](#viewing-budget-budget-view)","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" * [Displaying Overview](#displaying-overview-overview)","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" * [View Balance](#viewing-balance-balance)","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" * [Exiting the program](#exiting-the-program-exit)","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" * [Saving data](#saving-the-data)","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" * [Loading data](#loading-the-data)","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"* [FAQ](#faq)","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"* [Command Summary](#command-summary)","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"Financial Planner is a Command Line Interface (CLI) application for managing your finances conveniently. ","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"It is optimized for use via the CLI and leverages your expertise in CLI and your ability to type fast and gives ","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"you a one-stop interface to access a plethora of features to manage your finances.","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"{Give steps to get started quickly}","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"1. Down the latest version of `Duke` from [here](http://link.to/duke).","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"{Give detailed description of each feature}","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"### Budget","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"#### Setting a budget: `budget set`","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":"Sets a monthly budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"Format: `budget set /b BUDGET`","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"* `BUDGET` has to be a positive number.","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget set /b 500`","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":"A monthly budget of 500.00 has been set.","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"#### Updating budget: `budget update`","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"Updates budget to a new value.","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"Format: `budget update /b BUDGET`","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"* `Budget` has to be a positive number.","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":"* There has to be an existing budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget update /b 1000`","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":"Budget has been updated:","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":"Old initial budget: 500.00","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":"Old current budget: 500.00","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"New initial budget: 1000.00","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"New current budget: 1000.00","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"#### Resetting budget: `budget reset`","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"Resets current budget to initial budget if they are different.","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":"Format: `budget reset`","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":"* Budget will be reset to initial budget or current balance, whichever is lower.","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget reset`","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":"Budget has been reset to 1000.00.","lastModifiedDate":"2023-10-28"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":"#### Deleting budget: `budget delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":"Deletes existing budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":"Format: `budget delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":"Budget has been deleted.","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":"#### Viewing budget: `budget view`","lastModifiedDate":"2023-10-28"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":"View existing budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":"Format: `budget view`","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget view`","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":"You have a remaining budget of 1000.00.","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":"### Displaying overview: `overview`","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":"Displays an overview of user\u0027s financials.","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":"Format: `overview`","lastModifiedDate":"2023-10-28"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":"Example of usage: `overview`","lastModifiedDate":"2023-10-28"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":"Here is an overview of your financials:","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":"Total balance: 3790.00","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":"Highest income: 5000.00 Category: Salary","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":"Highest expense: 500.00 Category: Others","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":"Remaining budget for the month: 1000.00","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"ryan1604"},"content":"Reminders:","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"ryan1604"},"content":"No reminders added yet.","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"ryan1604"},"content":"### Viewing balance: `balance`","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":"View user\u0027s current balance.","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":"Format: `balance`","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"ryan1604"},"content":"Example of usage: `balance`","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"ryan1604"},"content":"Balance: 3790.00","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"ryan1604"},"content":"### Exiting the program: `exit`","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"ryan1604"},"content":"Exits the program.","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"ryan1604"},"content":"Format: `exit`","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"ryan1604"},"content":"### Saving the data","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"ryan1604"},"content":"Data is automatically saved upon exiting the program using the `exit` command. Closing the program without exiting ","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"ryan1604"},"content":"will not save the data.","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"ryan1604"},"content":"### Loading the data","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":"Existing data will be automatically loaded when the program starts up.","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":172,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":174,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer? ","lastModifiedDate":"2020-05-24"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":176,"author":{"gitId":"-"},"content":"**A**: {your answer here}","lastModifiedDate":"2020-05-24"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":178,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":180,"author":{"gitId":"-"},"content":"{Give a \u0027cheat sheet\u0027 of commands here}","lastModifiedDate":"2020-05-24"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":182,"author":{"gitId":"ryan1604"},"content":"| Action | Format |","lastModifiedDate":"2023-10-28"},{"lineNumber":183,"author":{"gitId":"ryan1604"},"content":"|----------------------|---------------------------|","lastModifiedDate":"2023-10-28"},{"lineNumber":184,"author":{"gitId":"ryan1604"},"content":"| **Set budget** | `budget set /b BUDGET` |","lastModifiedDate":"2023-10-28"},{"lineNumber":185,"author":{"gitId":"ryan1604"},"content":"| **Update budget** | `budget update /b BUDGET` |","lastModifiedDate":"2023-10-28"},{"lineNumber":186,"author":{"gitId":"ryan1604"},"content":"| **Reset budget** | `budget reset` |","lastModifiedDate":"2023-10-28"},{"lineNumber":187,"author":{"gitId":"ryan1604"},"content":"| **Delete budget** | `budget delete` |","lastModifiedDate":"2023-10-28"},{"lineNumber":188,"author":{"gitId":"ryan1604"},"content":"| **View budget** | `budget view` |","lastModifiedDate":"2023-10-28"},{"lineNumber":189,"author":{"gitId":"ryan1604"},"content":"| **Display Overview** | `overview` |","lastModifiedDate":"2023-10-28"},{"lineNumber":190,"author":{"gitId":"ryan1604"},"content":"| **View balance** | `balance` |","lastModifiedDate":"2023-10-28"},{"lineNumber":191,"author":{"gitId":"ryan1604"},"content":"| **Exit program** | `exit` |","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"-":37,"ryan1604":154}},{"path":"docs/diagrams/AddCashflowSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"participant AddCashflowCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"participant CashflowList","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"participant Income","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"participant Expense","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"participant Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"-\u003e AddCashflowCommand: execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"AddCashflowCommand -\u003e CashflowList: getInstance()","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"CashflowList -\u003e Ui: getInstance()","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"alt income","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand -\u003e CashflowList: addIncome(amount, incomeType, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" create Income","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Income: Income(value, type, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" Income -\u003e Income: addIncomeValue()","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e CashflowList: add(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Ui: printAddedCashflow(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":"else expense","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand -\u003e CashflowList: addExpense(amount, incomeType, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" create Expense","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Expense: Expense(value, type, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" Expense -\u003e Expense: addExpenseValue()","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e CashflowList: add(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Ui: printAddedCashflow(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":"else invalid command","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"NeoMinWei":31}},{"path":"docs/diagrams/Budget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"-\u003e BudgetCommand: execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"BudgetCommand -\u003e Ui: getInstance()","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"alt set","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: setBudget(budget)","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printSetBudget()","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"else update","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetBeforeUpdate()","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: updateBudget(budget)","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetAfterUpdate()","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"else delete","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" ref over BudgetCommand: DeleteBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"else reset","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" ref over BudgetCommand: ResetBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"else view","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" ref over BudgetCommand: ViewBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"else invalid command","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":27}},{"path":"docs/diagrams/CashflowClassDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"\u0027https://plantuml.com/class-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"skinparam classAttributeIconSize 0","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"hide empty members","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"!include style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"skinparam ClassBackgroundColor STORAGE_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"Class \"{abstract}\\nCashflow\" as Cashflow","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"Class Expense extends Cashflow","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"Class Income extends Cashflow","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"Class Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"Class CashflowList {","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" +addIncome(double, IncomeType, int)","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" +addExpense(double, ExpenseType, int)","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"Class AddCashflowCommand #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":"enum \"\u003c\u003cenumeration\u003e\u003e\\nExpenseType\" as ExpenseType","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"enum \"\u003c\u003cenumeration\u003e\u003e\\nIncomeType\" as IncomeType","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":"CashflowList -right-\u003e \"1\" Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":"AddCashflowCommand --\u003e \"1\" CashflowList","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":"CashflowList --\u003e \"*\" Cashflow","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":"CashflowList ..\u003e Income","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":"CashflowList ..\u003e Expense","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"NeoMinWei":28}},{"path":"docs/diagrams/Storage.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"\u0027https://plantuml.com/class-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"!include style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"skinparam ClassBackgroundColor STORAGE_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"package Storage as StoragePackage {","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"Class Storage","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nLoadData\" as LoadData","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nSaveData\" as SaveData","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"Class CashflowList","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nBudget\" as Budget","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nCashflow\" as Cashflow","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"Class \"\u003c\u003cenumeration\u003e\u003e\\nExpenseType\" as ExpenseType","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"Class \"\u003c\u003cenumeration\u003e\u003e\\nIncomeType\" as IncomeType","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"Class Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"Class FinancialPlanner #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"FinancialPlanner --\u003e Storage","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"Storage .right.-\u003e LoadData: uses \u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"Storage .left.\u003e SaveData: uses \u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"SaveData --\u003e CashflowList","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"SaveData ..\u003e Budget","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"SaveData ..\u003e Cashflow","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"LoadData --\u003e CashflowList","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e Budget","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e ExpenseType","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e IncomeType","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e Cashflow","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"LoadData -right-\u003e Ui: prints message \u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":35}},{"path":"docs/diagrams/deleteBudget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"mainframe sd DeleteBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"alt hasBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: deleteBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printDeleteBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"else else","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"delete\")","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":16}},{"path":"docs/diagrams/resetBudget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"mainframe sd ResetBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"alt spentBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" opt initialBudgetExceedBalance","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: setInitialBudget(balance);","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetExceedBalance()","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" end","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: resetBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printResetBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"else !hasBudget","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"delete\")","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"else else","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"reset\")","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":22}},{"path":"docs/diagrams/style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"/\u0027","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":" \u0027Commonly used styles and colors across diagrams.","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":" \u0027Refer to https://plantuml-documentation.readthedocs.io/en/latest for a more","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":" \u0027comprehensive list of skinparams.","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":" \u0027/","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"\u0027T1 through T4 are shades of the original color from lightest to darkest","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR #1D8900","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T1 #83E769","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T2 #3FC71B","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T3 #166800","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T4 #0E4100","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T1 #C8C8FA","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T2 #6A6ADC","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR #9D0012","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T1 #F97181","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T2 #E41F36","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T3 #7B000E","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T4 #51000A","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR #A38300","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T1 #FFE374","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T2 #EDC520","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T3 #806600","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T2 #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"!define USER_COLOR #000000","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"skinparam Package {","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" BackgroundColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" FontSize 16","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":"skinparam Class {","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" FontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" FontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" BorderColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" StereotypeFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"skinparam Actor {","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" BorderColor USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" Color USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"skinparam Sequence {","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" MessageAlign center","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" BoxFontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" BoxPadding 0","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" BoxFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"skinparam Participant {","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" FontColor #FFFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" Padding 20","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"skinparam ArrowFontStyle bold","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":"skinparam MinClassWidth 50","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":"skinparam ParticipantPadding 10","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":"skinparam Shadowing false","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"skinparam DefaultTextAlignment center","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"skinparam packageStyle Rectangle","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"hide members","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":"hide circle","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":79}},{"path":"docs/diagrams/viewBudget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"mainframe sd ViewBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"alt hasBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"else else","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"view\")","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":15}},{"path":"docs/diagrams/vis/categorizerSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"mainframe sd sort cashflow entries","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"autoactivate on","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"participant \":VisCommand\"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nCategorizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nCategorizer\": Categorizer.sortType(cashflowList, type)","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"alt type \u003d\u003d \"expense\"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nCategorizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nCategorizer\": sortExpenses(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":" return","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"else type \u003d\u003d \"income\"","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nCategorizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nCategorizer\": sortIncome(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" return","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"end","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"return sortedCashflow: Map\u003cString,Double\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"hide footbox","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"wwweert123":24}},{"path":"docs/diagrams/vis/visualisationClass.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"\u0027https://plantuml.com/class-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"abstract class Command {","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"execute() {abstract}","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"class VisCommand {","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"String type","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"String chart","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"class RawCommand {","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"List\u003cString\u003e args","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"Map\u003cString, String\u003e extraArgs","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"class Categorizer {","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"sortType()","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"sortExpenses()","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"sortIncome()","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":"class Visualizer {","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":"displayChart()","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":"displayPieChart()","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":"displayBarChart()","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":"Command \u003c|-- VisCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":"RawCommand \u003c.. VisCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":"Categorizer \u003c.. Visualizer","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":"Visualizer \u003c.. VisCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"wwweert123":36}},{"path":"docs/diagrams/vis/visualisationSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"participant \":VisCommand\"","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nCashFlowList\"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nCategorizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nVisualizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nUi\": Ui.getInstance()","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nCashFlowList\": CashFlowList.getInstance()","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nUi\": ui.printDisplayChart(type)","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"ref over \"\u003c\u003cclass\u003e\u003e\\nCategorizer\", \":VisCommand\" : sort cashflow entries","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"ref over \"\u003c\u003cclass\u003e\u003e\\nVisualizer\", \":VisCommand\": displaying chart","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"hide footbox","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"wwweert123":21}},{"path":"docs/diagrams/vis/visualizerSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"mainframe sd displaying chart","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"participant \":VisCommand\"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nVisualizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nVisualizer\": Visualizer.displayChart(chart, sortedCashFlow, type)","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"activate \"\u003c\u003cclass\u003e\u003e\\nVisualizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"alt chartType \u003d\u003d \"pie\"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nVisualizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nVisualizer\": displayPieChart(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"else chartType \u003d\u003d \"bar\"","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nVisualizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nVisualizer\": displayBarChart(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"end","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"hide footbox","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"wwweert123":20}},{"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":"ryan1604"},"content":"import seedu.financialplanner.commands.Command;","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.storage.Storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-07"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlanner {","lastModifiedDate":"2023-10-07"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" private static final String FILE_PATH \u003d \"data/data.txt\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private final Storage storage \u003d Storage.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private final WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" ","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" private FinancialPlanner() {","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" FinancialPlannerLogger.initialise();","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" new FinancialPlanner().run();","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" public void run() {","lastModifiedDate":"2023-10-07"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" storage.load(FILE_PATH);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" String input;","lastModifiedDate":"2023-10-07"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" Command command \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" input \u003d ui.input();","lastModifiedDate":"2023-10-07"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" command.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" save();","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" ui.exitMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" public void save() {","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" storage.save(FILE_PATH);","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","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-07"}],"authorContributionMap":{"NeoMinWei":1,"ryan1604":40,"YFshadaow":16}},{"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/cashflow/Budget.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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-23"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" public static void deleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" public static void resetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d initialBudget;","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" public static void setInitialBudget(double amount) {","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d amount;","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" public static void updateCurrentBudget(double amount) {","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" currentBudget +\u003d amount;","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":1,"ryan1604":81}},{"path":"src/main/java/seedu/financialplanner/cashflow/Cashflow.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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":" protected String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" public Cashflow(double amount, int recur, String description) {","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" this.recur \u003d recur;","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" public static void clearBalance() {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" balance \u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" public static void setBalance(double amount) {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" balance \u003d amount;","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg-reused","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" //Reused from https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" public static double round(double value, int places) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" if (places \u003c 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" BigDecimal bd \u003d BigDecimal.valueOf(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" bd \u003d bd.setScale(places, RoundingMode.HALF_UP);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" return bd.doubleValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" //@author Nick Bolton-reused","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" //Reused from","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"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":50,"author":{"gitId":"NeoMinWei"},"content":" public String capitalize(String line) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" return Character.toUpperCase(line.charAt(0)) + line.substring(1);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" //@author Nick Bolton","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" String string \u003d \" Amount: \" + decimalFormat.format(round(amount, 2));","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" if (recur !\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d System.lineSeparator() + \" Recurring every: \" + recur + \" days\";","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" if (description !\u003d null) {","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d System.lineSeparator() + \" Description: \" + description;","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" return string;","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":" public String formatBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" return decimalFormat.format(round(Cashflow.balance, 2));","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" public double getAmount() {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" return this.amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" public static double getBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" return balance;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" String string \u003d \" | \" + this.recur;","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" if (description !\u003d null) {","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d \" | \" + this.description;","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" return string;","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" public abstract ExpenseType getExpenseType();","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" public abstract IncomeType getIncomeType();","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":2,"NeoMinWei":78,"ryan1604":16}},{"path":"src/main/java/seedu/financialplanner/cashflow/CashflowList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"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, description);","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"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, description);","lastModifiedDate":"2023-10-28"},{"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 double deleteCashflowWithoutCategory(int index) {","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":" return toRemove.getAmount();","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" //helper method to find the index of a given cashflow in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" //given its index in its respective list. e.g. \"income 3\" is the third income","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" //in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" private int cashflowIndexFinder(CashflowCategory category, int cashflowIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" switch (category) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromIncomeIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromExpenseIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" return -1;","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":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" private int findCashflowIndexFromIncomeIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"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":" private int findCashflowIndexFromExpenseIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" public double deleteCashflowWithCategory(CashflowCategory category, int index) {","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":" int listIndex \u003d cashflowIndexFinder(category, index);","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" Cashflow toRemove \u003d list.get(listIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" list.remove(listIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" toRemove.deleteCashflowvalue();","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" ui.printDeletedCashflow(toRemove);","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize - 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" return toRemove.getAmount();","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" public void load(Cashflow entry) {","lastModifiedDate":"2023-10-10"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" list.add(entry);","lastModifiedDate":"2023-10-10"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" //temp method","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" public String getList() {","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-12"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" output.append(entry).append(\"\\n\");","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" return output.toString();","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":119,"YFshadaow":3,"ryan1604":16}},{"path":"src/main/java/seedu/financialplanner/cashflow/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" super(amount, recur, description);","lastModifiedDate":"2023-10-28"},{"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/cashflow/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" super(amount, recur, description);","lastModifiedDate":"2023-10-28"},{"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":"","lastModifiedDate":"2023-10-23"},{"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 \"I | \" + 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/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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"public class AddCashflowCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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 String description \u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" public AddCashflowCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" String categoryString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(categoryString.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"a\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have an amount\");","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing amount as double\");","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" amount \u003d Double.parseDouble(rawCommand.extraArgs.get(\"a\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" if (amount \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Amount cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"a\");","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"t\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have a type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" String stringType \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" if (category.equals(CashflowCategory.EXPENSE)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing ExpenseType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" expenseType \u003d ExpenseType.valueOf(stringType.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for ExpenseType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be one of the following: \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" \"dining, entertainment, shopping, travel, insurance, necessities, others\");","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" } else if (category.equals(CashflowCategory.INCOME)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing IncomeType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" incomeType \u003d IncomeType.valueOf(stringType.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for IncomeType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be one of the following: \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" \"salary, investments, allowance, others\");","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"YFshadaow"},"content":" if (rawCommand.extraArgs.containsKey(\"r\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing recur as integer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"YFshadaow"},"content":" recur \u003d Integer.parseInt(rawCommand.extraArgs.get(\"r\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Recurrence must be an integer\");","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"r\");","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" if (recur \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Recurring value cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" if (rawCommand.extraArgs.containsKey(\"d\")) {","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Getting description of cashflow\");","lastModifiedDate":"2023-10-28"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" String line \u003d rawCommand.extraArgs.get(\"d\");","lastModifiedDate":"2023-10-28"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" if (line.isBlank()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Empty description\");","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Description cannot be left empty\");","lastModifiedDate":"2023-10-28"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" description \u003d line.trim();","lastModifiedDate":"2023-10-28"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" rawCommand.extraArgs.remove(\"d\");","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":114,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" assert recur \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" assert amount \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" if (category.equals(CashflowCategory.EXPENSE)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" assert expenseType.equals(ExpenseType.DINING) || expenseType.equals(ExpenseType.ENTERTAINMENT)","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.SHOPPING) || expenseType.equals(ExpenseType.TRAVEL)","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.INSURANCE) || expenseType.equals(ExpenseType.OTHERS)","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.NECESSITIES);","lastModifiedDate":"2023-10-23"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" } else if (category.equals(CashflowCategory.INCOME)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":" assert incomeType.equals(IncomeType.SALARY) || incomeType.equals(IncomeType.INVESTMENTS)","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":" || incomeType.equals(IncomeType.ALLOWANCE) || incomeType.equals(IncomeType.OTHERS);","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"YFshadaow"},"content":" switch (category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addIncome(amount, incomeType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":132,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-08"},{"lineNumber":133,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addExpense(amount, expenseType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"NeoMinWei"},"content":" deductFromBudget(cashflowList.list.get(cashflowList.list.size() - 1));","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":139,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":143,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":" private static void deductFromBudget(Cashflow entry) {","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"NeoMinWei"},"content":" double expenseAmount \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":" Budget.deduct(expenseAmount);","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"NeoMinWei"},"content":" ui.printBudgetAfterDeduction();","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":1,"NeoMinWei":103,"ryan1604":9,"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":"ryan1604"},"content":"public class AddReminderCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":30,"ryan1604":1}},{"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":"ryan1604"},"content":"public class AddStockCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"wwweert123"},"content":" stockCode \u003d rawCommand.extraArgs.get(\"s\").toUpperCase();","lastModifiedDate":"2023-10-22"},{"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":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"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.WARNING, \"Error adding stock to watchlist\");","lastModifiedDate":"2023-10-23"},{"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":31,"NeoMinWei":2,"YFshadaow":13,"ryan1604":1}},{"path":"src/main/java/seedu/financialplanner/commands/BalanceCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"public class BalanceCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" public BalanceCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Balance: \" + getBalanceString());","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" private String getBalanceString() {","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(Cashflow.getBalance(), 2));","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"NeoMinWei":1,"ryan1604":27}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"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 Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private double budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" private String command;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" public BudgetCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" command \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"delete\") || command.equals(\"reset\") || command.equals(\"view\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" validateCommandFormat(rawCommand);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" validateBudget(rawCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"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-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" \"or equal to total balance\";","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" rawCommand.extraArgs.remove(\"b\");","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" private void validateBudget(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Parsing budget as double\");","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" budget \u003d Double.parseDouble(rawCommand.extraArgs.get(\"b\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Budget must be a number.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" if (budget \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be greater than 0.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" if (budget \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be lower than total balance.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" private void validateCommandFormat(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" if (!command.equals(\"set\") \u0026\u0026 !command.equals(\"update\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid arguments for budget command\");","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget command must be one of the following: set, update, \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" \"delete, reset, view.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"set\") \u0026\u0026 Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to set existing budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is an existing budget, did you mean update?\");","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" } else if (command.equals(\"update\") \u0026\u0026 !Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to update non-existent budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is no budget set yet, did you mean set?\");","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.containsKey(\"b\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Missing argument /b in command\");","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Missing /b argument.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" assert command.equals(\"set\") || command.equals(\"update\") || command.equals(\"delete\") ||","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" command.equals(\"reset\") || command.equals(\"view\");","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" switch (command) {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" case \"set\":","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" setBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" case \"update\":","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" updateBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" case \"delete\":","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" case \"reset\":","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" resetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" case \"view\":","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" viewBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Unknown command.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" private void viewBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" ui.printBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"view\");","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" private void resetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":" if (Budget.getInitialBudget() !\u003d Budget.getCurrentBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" if (Budget.getInitialBudget() \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" Budget.setInitialBudget(Cashflow.getBalance());","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetExceedBalance();","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":" Budget.resetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":" ui.printResetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" } else if (!Budget.hasBudget()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"delete\");","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"reset\");","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" private void deleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" ui.printDeleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"delete\");","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" private void updateBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Updating budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetBeforeUpdate();","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(budget);","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetAfterUpdate();","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"ryan1604"},"content":" private void setBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Setting budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(budget);","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":" ui.printSetBudget();","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":145}},{"path":"src/main/java/seedu/financialplanner/commands/Command.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":"ryan1604"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-23"},{"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":4,"ryan1604":1}},{"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.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"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-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public class DeleteCashflowCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"YFshadaow"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"YFshadaow"},"content":" handleDeleteCashflowWithoutCategory();","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" assert index !\u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-23"},{"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.getInstance().showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-23"},{"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":" double amount \u003d cashflowList.deleteCashflowWithoutCategory(index);","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" Budget.updateCurrentBudget(amount);","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" }","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":" private void handleDeleteCashflowWithCategory() {","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Deleting cashflow with category\");","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" double amount \u003d cashflowList.deleteCashflowWithCategory(category, index);","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" Budget.updateCurrentBudget(amount);","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"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":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":83,"ryan1604":7,"YFshadaow":12}},{"path":"src/main/java/seedu/financialplanner/commands/DeleteStockCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public class DeleteStockCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" private final String stockCode;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" public DeleteStockCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.containsKey(\"s\")) {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(\"Stock code cannot be empty\");","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Parsing stockcode from input\");","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" stockCode \u003d rawCommand.extraArgs.get(\"s\").toUpperCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" rawCommand.extraArgs.remove(\"s\");","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" String stockName;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"deleting stock from watchlist\");","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" stockName \u003d watchList.deleteStock(stockCode);","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" assert stockName !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" ui.printDeleteStock(stockName);","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Error deleting stock from watchlist\");","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"wwweert123":46,"ryan1604":1}},{"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":"ryan1604"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":15,"ryan1604":1}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"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":{"wwweert123":1,"NeoMinWei":3,"hshiah":43,"ryan1604":2,"YFshadaow":7}},{"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":"ryan1604"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":11,"ryan1604":1}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":" ui.showMessage((i + 1) + \": \" + cashflowToBePrinted.get(i));","lastModifiedDate":"2023-10-23"},{"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":8,"YFshadaow":59,"ryan1604":2}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.reminder.Reminder;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.reminder.ReminderList;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public class OverviewCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" private static final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" public OverviewCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","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":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" String balance \u003d getBalance();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" String highestIncome \u003d getHighestIncome();","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" String highestExpense \u003d getHighestExpense();","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" String budget \u003d getBudgetDesc();","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" String reminders \u003d getReminders();","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" Ui.getInstance().printOverview(balance, highestIncome, highestExpense, budget, reminders);","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" //todo: goal disparity","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" private String getBudgetDesc() {","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" return Budget.getCurrentBudgetString();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" private String getHighestIncome() {","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" double maxIncome \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" String incomeType \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Income \u0026\u0026 entry.getAmount() \u003e maxIncome) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" maxIncome \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" incomeType \u003d entry.capitalize(entry.getIncomeType().","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" toString().toLowerCase()); // Capitalise the first letter","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" if (incomeType.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" return \"No income added yet.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxIncome) + \" Category: \" + incomeType;","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" private String getHighestExpense() {","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" double maxExpense \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" String expenseType \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Expense \u0026\u0026 entry.getAmount() \u003e maxExpense) {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" maxExpense \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" expenseType \u003d entry.capitalize(entry.getExpenseType().","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" toString().toLowerCase()); // Capitalise the first letter","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" if (expenseType.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" return \"No expense added yet.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxExpense) + \" Category: \" + expenseType;","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" private String formatDoubleToString(double amount) {","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(amount, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" private String getReminders() {","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" ReminderList reminderList \u003d ReminderList.INSTANCE;","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" if (reminderList.list.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" return \"No reminders added yet.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" StringBuilder reminders \u003d new StringBuilder();","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" int count \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" for (Reminder reminder : reminderList.list) {","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" reminders.append(count).append(\". \").append(reminder.toString()).append(\"\\n\");","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" count++;","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" return reminders.toString();","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" private String getBalance() {","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(Cashflow.getBalance());","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":5,"ryan1604":97}},{"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":"ryan1604"},"content":"public class SetGoalCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" String labelString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"g\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Goal must have an amount\");","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" try{","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" amount \u003d Integer.parseInt(rawCommand.extraArgs.get(\"g\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" } catch (IllegalArgumentException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"g\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"l\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Please specify the content of the goal\");","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" goal \u003d rawCommand.extraArgs.get(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" String unknownExtraArgument \u003d new java.util.ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","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":"","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"hshiah"},"content":" GoalList.INSTANCE.list.add(new Goal(goal, amount));","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" Ui.getInstance().showMessage(\"Set Goal Successfully!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":1,"hshiah":34,"ryan1604":2}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Categorizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Visualizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"public class VisCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" private String type;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" private String chart;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-17"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" public void execute() throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" assert !chart.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" assert !type.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" ui.printDisplayChart(type, chart);","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" Visualizer.displayChart(chart, Categorizer.sortType(CashflowList.getInstance(), type), type);","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":45,"NeoMinWei":1,"ryan1604":2}},{"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 seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-22"},{"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":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"public class WatchListCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" ui.printWatchListHeader();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" watchList.fetchFMPStockPrices();","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Printing watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" ui.printStocksInfo(watchList);","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"wwweert123":24,"NeoMinWei":3,"YFshadaow":8,"ryan1604":3}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" public Goal(String label, int amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.label \u003d label;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" return \"Goal: \" + this.label + \" | \" + this.amount + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" //TODO edit the expense to mark the goal as done","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" //TODO delete the Reminder","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" return this.label + \" | \" + this.amount + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":24,"ryan1604":4}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" public void load(Goal goal) {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" list.add(goal);","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" //TODO deleteGoal","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13,"ryan1604":1}},{"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.io.Serializable;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"public class Stock implements Serializable {","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private String symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private String exchange;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private String stockName;","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" private String price;","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" private String dayHigh;","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" private String dayLow;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" public Stock(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" this.stockName \u003d getStockNameFromAPI(symbol);","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" public String getStockName() {","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" return stockName;","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" public String getStockNameFromAPI(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" final String API_ENDPOINT \u003d \"https://www.alphavantage.co/query?function\u003dSYMBOL_SEARCH\u0026keywords\u003d\";","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" final String API_KEY \u003d \"LNKL0548PHY2F0QU\";","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s\u0026apikey\u003d%s\", API_ENDPOINT,symbol,API_KEY);","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API for stock info\");","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" Object obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" JSONObject jsonObject \u003d (JSONObject) obj;","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" JSONArray ja \u003d (JSONArray) jsonObject.get(\"bestMatches\");","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" if (ja \u003d\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"API limit Reached\");","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" if (ja.isEmpty()) {","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) ja.get(0);","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" String symbolFound \u003d (String) stock.get(\"1. symbol\");","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" // TODO: Might need to use AMEX when NYSE is used","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" // TODO: Need to check if it is added already","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" // TODO: add a cap to adding","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" // TODO: Separate based on market","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" // TODO: add other info","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" // TODO: testing","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" if (!symbolFound.equals(symbol)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" assert stock.get(\"2. name\") !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" return (String) stock.get(\"2. name\");","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" } catch (IOException 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":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" }","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 String getSymbol() {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" return 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":" public void setSymbol(String symbol) {","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":" public String toString() {","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":" return symbol + \",\";","lastModifiedDate":"2023-10-08"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":" public String getPrice() {","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":" return price;","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":" public void setPrice(String price) {","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"wwweert123"},"content":" this.price \u003d price;","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"wwweert123"},"content":" public String getExchange() {","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":" return exchange;","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"wwweert123"},"content":" public void setExchange(String exchange) {","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"wwweert123"},"content":" this.exchange \u003d exchange;","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"wwweert123"},"content":" public String getDayHigh() {","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"wwweert123"},"content":" return dayHigh;","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"wwweert123"},"content":" public void setDayHigh(String dayHigh) {","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"wwweert123"},"content":" this.dayHigh \u003d dayHigh;","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"wwweert123"},"content":" public String getDayLow() {","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"wwweert123"},"content":" return dayLow;","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"wwweert123"},"content":" public void setDayLow(String dayLow) {","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"wwweert123"},"content":" this.dayLow \u003d dayLow;","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":127,"ryan1604":1}},{"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.JSONObject;","lastModifiedDate":"2023-10-22"},{"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-09"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.storage.LoadData;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"public class WatchList {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private static WatchList watchlist \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private ArrayList\u003cStock\u003e stocks \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" private final String API_ENDPOINT \u003d \"https://financialmodelingprep.com/api/v3/quote/\";","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" private final String API_KEY \u003d \"iFumtYryBCbHpS3sDqLdVKi2SdP63vSV\";","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" private WatchList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" stocks \u003d LoadData.loadWatchList();","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" if (!stocks.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" return;","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Initializing New watchlist.. adding AAPL and GOOGL for your reference\");","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" Stock apple \u003d new Stock(\"AAPL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" assert apple.getSymbol() !\u003d null \u0026\u0026 apple.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" stocks.add(apple);","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" Stock google \u003d new Stock(\"GOOGL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" assert google.getSymbol() !\u003d null \u0026\u0026 google.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" stocks.add(google);","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" }","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":" public static WatchList getInstance() {","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" if (watchlist \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" watchlist \u003d new WatchList();","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" return watchlist;","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" public void fetchFMPStockPrices() throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" if (stocks.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Empty Watchlist. Nothing to display...\");","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" StringBuilder queryStocks \u003d new StringBuilder();","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" assert !stocks.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" for (Stock stock : stocks) {","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" queryStocks.append(stock.toString());","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s?apikey\u003d%s\", API_ENDPOINT, queryStocks, API_KEY);","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" Object obj;","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API endpoint FMP\");","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" // System.out.println(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Cant request API endpoint\");","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Interrupted\");","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Could not parse to JSON\");","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" JSONArray ja \u003d (JSONArray) obj;","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" if (ja.size() !\u003d stocks.size()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Error getting API info!\");","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":" int i \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":" for (Object jo : ja) {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) jo;","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":" Stock stockLocal \u003d stocks.get(i);","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":" // Check if the JSONObject from response matches the stock in the stocks list using symbol","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":" if (!stockLocal.getSymbol().equals(stock.get(\"symbol\"))) {","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":" i +\u003d 1;","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Stocks matching error!\");","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"wwweert123"},"content":" continue;","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"wwweert123"},"content":" extractStockInfoFromJSON(stock, stockLocal);","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":" i +\u003d 1;","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":109,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":110,"author":{"gitId":"wwweert123"},"content":" public String addStock(String stockCode) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":111,"author":{"gitId":"wwweert123"},"content":" if (stocks.size() \u003e\u003d 5) {","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Watchlist is full (max 5). Delete a stock to add a new one\");","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"wwweert123"},"content":" for (Stock stock: stocks) {","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"wwweert123"},"content":" if (stockCode.equals(stock.getSymbol().toUpperCase())) {","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock is already present in Watchlist. Use watchlist to view it!\");","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"wwweert123"},"content":" Stock newStock \u003d null;","lastModifiedDate":"2023-10-09"},{"lineNumber":121,"author":{"gitId":"wwweert123"},"content":" newStock \u003d new Stock(stockCode);","lastModifiedDate":"2023-10-13"},{"lineNumber":122,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"wwweert123"},"content":" assert newStock.getSymbol() !\u003d null \u0026\u0026 newStock.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"wwweert123"},"content":" stocks.add(newStock);","lastModifiedDate":"2023-10-09"},{"lineNumber":125,"author":{"gitId":"wwweert123"},"content":" return newStock.getStockName();","lastModifiedDate":"2023-10-09"},{"lineNumber":126,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":127,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":128,"author":{"gitId":"wwweert123"},"content":" public String deleteStock(String stockCode) throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"wwweert123"},"content":" if (stocks.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"No stock in watchlist!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"wwweert123"},"content":" Stock toBeRemoved \u003d stocks","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"wwweert123"},"content":" .stream()","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"wwweert123"},"content":" .filter(stock -\u003e stockCode.equals(stock.getSymbol()))","lastModifiedDate":"2023-10-22"},{"lineNumber":135,"author":{"gitId":"wwweert123"},"content":" .findFirst()","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"wwweert123"},"content":" .orElseThrow(() -\u003e new FinancialPlannerException(\"Does not Exist in Watchlist\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"wwweert123"},"content":" stocks.remove(toBeRemoved);","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"wwweert123"},"content":" return toBeRemoved.getStockName();","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"wwweert123"},"content":" public void extractStockInfoFromJSON(JSONObject stock, Stock stockLocal) {","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"wwweert123"},"content":" String price \u003d stock.get(\"price\").toString();","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"wwweert123"},"content":" assert price !\u003d null;","lastModifiedDate":"2023-10-27"},{"lineNumber":144,"author":{"gitId":"wwweert123"},"content":" stockLocal.setPrice(price);","lastModifiedDate":"2023-10-27"},{"lineNumber":145,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":146,"author":{"gitId":"wwweert123"},"content":" String exchange \u003d stock.get(\"exchange\").toString();","lastModifiedDate":"2023-10-27"},{"lineNumber":147,"author":{"gitId":"wwweert123"},"content":" assert exchange !\u003d null;","lastModifiedDate":"2023-10-27"},{"lineNumber":148,"author":{"gitId":"wwweert123"},"content":" stockLocal.setExchange(exchange);","lastModifiedDate":"2023-10-27"},{"lineNumber":149,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":150,"author":{"gitId":"wwweert123"},"content":" String dayHigh \u003d stock.get(\"dayHigh\").toString();","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"wwweert123"},"content":" assert dayHigh !\u003d null;","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"wwweert123"},"content":" stockLocal.setDayHigh(dayHigh);","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":154,"author":{"gitId":"wwweert123"},"content":" String dayLow \u003d stock.get(\"dayLow\").toString();","lastModifiedDate":"2023-10-27"},{"lineNumber":155,"author":{"gitId":"wwweert123"},"content":" assert dayLow !\u003d null;","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"wwweert123"},"content":" stockLocal.setDayLow(dayLow);","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":159,"author":{"gitId":"hshiah"},"content":" public int size() {","lastModifiedDate":"2023-10-12"},{"lineNumber":160,"author":{"gitId":"hshiah"},"content":" return stocks.size();","lastModifiedDate":"2023-10-12"},{"lineNumber":161,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":162,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":163,"author":{"gitId":"hshiah"},"content":" public Stock get(int index) {","lastModifiedDate":"2023-10-12"},{"lineNumber":164,"author":{"gitId":"hshiah"},"content":" return stocks.get(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":165,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":166,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"wwweert123"},"content":" public ArrayList\u003cStock\u003e getStocks() {","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"wwweert123"},"content":" return stocks;","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"wwweert123"},"content":" public void setStocks(ArrayList\u003cStock\u003e stocks) {","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"wwweert123"},"content":" this.stocks \u003d stocks;","lastModifiedDate":"2023-10-23"},{"lineNumber":173,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":174,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":165,"YFshadaow":1,"hshiah":8}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" public Reminder(String type, String date) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" return \"Reminder: \" + this.type + \" | \" + this.date + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" /*","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" * Returns a string that can be saved to a file.","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" * Format: type | date | isDone","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" * Example: \"Reminder: Birthday | 2020-10-10 | false\"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" return this.type + \" | \" + this.date + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":29,"ryan1604":2}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":"public class ReminderList {","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" public static final ReminderList INSTANCE \u003d new ReminderList();","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" public ArrayList\u003cReminder\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private ReminderList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" public void load(Reminder reminder) {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" list.add(reminder);","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" //TODO deleteReminder","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13,"ryan1604":1}},{"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":"wwweert123"},"content":"import seedu.financialplanner.investments.Stock;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.io.StreamCorruptedException;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"public abstract class LoadData {","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private static final String FILE_PATH \u003d \"data/watchlist.txt\";","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" private static final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" private static final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" public static void load(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" Scanner inputFile \u003d new Scanner(new FileReader(filePath));","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" String line;","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Loading existing file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" while(inputFile.hasNext()) {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" line \u003d inputFile.nextLine();","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" String[] split \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" String type \u003d split[0].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" final Cashflow entry \u003d getEntry(type, split);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" cashflowList.load(entry);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" case \"B\":","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" loadBudget(split);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","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":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" inputFile.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"File not found. Creating new file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException | FinancialPlannerException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" String message \u003d e.getMessage();","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" handleCorruptedFile(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" private static void handleCorruptedFile(String message) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"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":62,"author":{"gitId":"ryan1604"},"content":" if (createNewFile()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" Cashflow.clearBalance();","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Please fix the corrupted file, \" +","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" \"which can be found in data/data.txt.\\nError message: \" + message);","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","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":" private static void loadBudget(String[] split) throws IllegalArgumentException {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" double initial \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" double current \u003d Double.parseDouble(split[2].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" if (initial \u003d\u003d 0 \u0026\u0026 current \u003d\u003d 0) {","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" if (initial \u003c 0 || current \u003c 0) {","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Negative values for budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" if (initial \u003e Cashflow.getBalance() || current \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Budget exceeds balance\");","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" if (initial \u003c current) {","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Current budget exceeds initial budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" Budget.load(initial, current);","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":" private static boolean createNewFile() {","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" String line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" while (!line.equalsIgnoreCase(\"y\") \u0026\u0026 !line.equalsIgnoreCase(\"n\")) {","lastModifiedDate":"2023-10-10"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Unknown input. Please enter Y or N only.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" return line.equalsIgnoreCase(\"y\");","lastModifiedDate":"2023-10-10"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" private static Cashflow getEntry(String type, String[] split)","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" throws FinancialPlannerException, IllegalArgumentException {","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" double value;","lastModifiedDate":"2023-10-10"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" int recur;","lastModifiedDate":"2023-10-10"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" Cashflow entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-10"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-10"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" description \u003d getDescription(split);","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" checkValidInput(value, recur);","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":" IncomeType incomeType;","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" incomeType \u003d IncomeType.valueOf(split[2].trim().toUpperCase());","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Invalid income type\");","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" entry \u003d new Income(value, incomeType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-10"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" description \u003d getDescription(split);","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" checkValidInput(value, recur);","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":" ExpenseType expenseType;","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" expenseType \u003d ExpenseType.valueOf(split[2].trim().toUpperCase());","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Invalid expense type\");","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":" entry \u003d new Expense(value, expenseType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-10"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","lastModifiedDate":"2023-10-10"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" return entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":139,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"NeoMinWei"},"content":" private static String getDescription(String[] split) {","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"NeoMinWei"},"content":" String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"NeoMinWei"},"content":" if (split.length \u003e 4) {","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"NeoMinWei"},"content":" description \u003d split[4].trim();","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"NeoMinWei"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"NeoMinWei"},"content":" description \u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"NeoMinWei"},"content":" return description;","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"wwweert123"},"content":" public static ArrayList\u003cStock\u003e loadWatchList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":151,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":152,"author":{"gitId":"wwweert123"},"content":" ArrayList\u003cStock\u003e stocksData \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":153,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":154,"author":{"gitId":"wwweert123"},"content":" ObjectInputStream watchListStocksInputStream","lastModifiedDate":"2023-10-23"},{"lineNumber":155,"author":{"gitId":"wwweert123"},"content":" \u003d new ObjectInputStream(","lastModifiedDate":"2023-10-23"},{"lineNumber":156,"author":{"gitId":"wwweert123"},"content":" new FileInputStream(FILE_PATH)","lastModifiedDate":"2023-10-23"},{"lineNumber":157,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-23"},{"lineNumber":158,"author":{"gitId":"wwweert123"},"content":" stocksData \u003d (ArrayList\u003cStock\u003e) watchListStocksInputStream.readObject();","lastModifiedDate":"2023-10-23"},{"lineNumber":159,"author":{"gitId":"wwweert123"},"content":" watchListStocksInputStream.close();","lastModifiedDate":"2023-10-23"},{"lineNumber":160,"author":{"gitId":"wwweert123"},"content":" } catch (StreamCorruptedException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":161,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"Watchlist file corrupted.. Rebuilding\");","lastModifiedDate":"2023-10-23"},{"lineNumber":162,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"Watchlist file not found... Creating\");","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"wwweert123"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"FIle appears to be corrupted...\");","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":167,"author":{"gitId":"wwweert123"},"content":" return stocksData;","lastModifiedDate":"2023-10-23"},{"lineNumber":168,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":" private static void checkValidInput(double value, int recur) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"ryan1604"},"content":" if (value \u003c 0 || recur \u003c 0) {","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Amount and number of days cannot be negative\");","lastModifiedDate":"2023-10-23"},{"lineNumber":173,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":174,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":175,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"wwweert123":27,"NeoMinWei":31,"ryan1604":115,"YFshadaow":2}},{"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":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public abstract class SaveData {","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" private static final String FILE_PATH \u003d \"data/watchlist.txt\";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" private static final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" public static void save(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" fw.write(entry.formatString() + \"\\n\");","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" fw.write(Budget.formatString() + \"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" fw.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error saving file.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" public static void saveWatchList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" ObjectOutputStream watchListStocksOutput","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" \u003d new ObjectOutputStream(new FileOutputStream(FILE_PATH));","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" watchListStocksOutput.writeObject(wl.getStocks());","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" watchListStocksOutput.close();","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"Unable to save watchlist to file\");","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"wwweert123":21,"NeoMinWei":3,"ryan1604":22,"YFshadaow":1}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"public class Storage {","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" private static Storage storage \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" private final Path path \u003d Paths.get(\"data\");","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" private Storage() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Directory doesn\u0027t exist. Creating directory...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Error creating directory: \" + e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" }","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"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" public static Storage getInstance() {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" if (storage \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" return storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" public void load(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" LoadData.load(filePath);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" public void save(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" SaveData.save(filePath);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" SaveData.saveWatchList();","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"wwweert123":2,"ryan1604":37,"YFshadaow":2}},{"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":"ryan1604"},"content":"import seedu.financialplanner.commands.Command;","lastModifiedDate":"2023-10-23"},{"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.commands.BalanceCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.commands.DeleteStockCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"public class Parser {","lastModifiedDate":"2023-10-07"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" private static final String EXIT_COMMAND \u003d \"exit\";","lastModifiedDate":"2023-10-07"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" private static final String WATCHLIST_COMMAND \u003d \"watchlist\";","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" private static final String ADD_CASHFLOW_COMMAND \u003d \"add\";","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" private static final String DELETE_CASHFLOW_COMMAND \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" private static final String ADD_STOCK_COMMAND \u003d \"addstock\";","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" private static final String DELETE_STOCK_COMMAND \u003d \"deletestock\";","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":" private static final String FIND_COMMAND \u003d \"find\";","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" private static final String OVERVIEW_COMMAND \u003d \"overview\";","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" private static final String BUDGET_COMMAND \u003d \"budget\";","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" private static final String VISUALIZATION_COMMAND \u003d \"vis\";","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"hshiah"},"content":" private static final String ADD_REMINDER_COMMAND \u003d \"addreminder\";","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" private static final String LIST_COMMAND \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"hshiah"},"content":" private static final String SET_GOAL_COMMAND \u003d \"set\";","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" private static final String BALANCE_COMMAND \u003d \"balance\";","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" public static Command parseCommand(String input) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" RawCommand rawCommand \u003d parseRawCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" return parseCommand(rawCommand);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" public static Command parseCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" switch (rawCommand.getCommandName()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" case EXIT_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" return new ExitCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" case WATCHLIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" return new WatchListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" case ADD_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" return new AddCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" case DELETE_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" return new DeleteCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" case ADD_STOCK_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" return new AddStockCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" case DELETE_STOCK_COMMAND:","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" return new DeleteStockCommand(rawCommand);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" case FIND_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"YFshadaow"},"content":" return new FindCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" case BUDGET_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" return new BudgetCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" case VISUALIZATION_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" return new VisCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" case OVERVIEW_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" return new OverviewCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"hshiah"},"content":" case ADD_REMINDER_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"hshiah"},"content":" return new AddReminderCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"YFshadaow"},"content":" case LIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"YFshadaow"},"content":" return new ListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"hshiah"},"content":" case SET_GOAL_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"hshiah"},"content":" return new SetGoalCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" case BALANCE_COMMAND:","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" return new BalanceCommand(rawCommand);","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-07"},{"lineNumber":81,"author":{"gitId":"YFshadaow"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"YFshadaow"},"content":" public static RawCommand parseRawCommand(String input) throws IllegalArgumentException{","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" Iterator\u003cString\u003e iterator \u003d Arrays.stream(input.split(\" \")).iterator();","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" if (!iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Command cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":90,"author":{"gitId":"YFshadaow"},"content":" String commandName \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"YFshadaow"},"content":" Map\u003cString, String\u003e extraArgs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e extraArgumentContentBuffer \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"YFshadaow"},"content":" String currentExtraArgumentName \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"YFshadaow"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"YFshadaow"},"content":" String next \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"YFshadaow"},"content":" if (next.startsWith(\"/\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument when next extra argument is found","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"YFshadaow"},"content":" if (next.length() \u003d\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Extra argument name cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"YFshadaow"},"content":" currentExtraArgumentName \u003d next.substring(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"YFshadaow"},"content":" args.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument at the very end","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" return new RawCommand(commandName, args, extraArgs);","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" private static void savePreviousExtraArgument(Map\u003cString, String\u003e extraArgs","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":" , String currentExtraArgumentName, List\u003cString\u003e extraArgumentContentBuffer) {","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"YFshadaow"},"content":" if (extraArgs.containsKey(currentExtraArgumentName)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"YFshadaow"},"content":" String.format(\"Duplicate extra argument name: %s\", currentExtraArgumentName));","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"YFshadaow"},"content":" extraArgs.put(currentExtraArgumentName, String.join(\" \", extraArgumentContentBuffer));","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.clear();","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":14,"NeoMinWei":24,"ryan1604":29,"YFshadaow":60,"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 seedu.financialplanner.investments.Stock;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"public class Ui {","lastModifiedDate":"2023-10-07"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" private static Ui ui \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" private final String RED \u003d \"\\u001B[31m\";","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" private final String GREEN \u003d \"\\u001B[32m\";","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" private final String RESET \u003d \"\\u001B[0m\";","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" private final String YELLOW \u003d \"\\u001B[33m\";","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" private Scanner Scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" private Ui() {","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" public static Ui getInstance() {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" if (ui \u003d\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" return ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" public static void printCorruptedFileError(String message) {","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" public Scanner getScanner() {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" return Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" public void setScanner(Scanner scanner) {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" this.Scanner \u003d scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-10-07"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" assert !message.isEmpty();","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Welcome to your Financial Planner. Type something to get started.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" public void exitMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Exiting Financial Planner. Goodbye.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" public String input() {","lastModifiedDate":"2023-10-07"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":" return Scanner.nextLine().trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" public void printWatchListHeader() {","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Symbol\");","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Market\");","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" System.out.print(YELLOW + \"Price\" + RESET);","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" System.out.print(GREEN + \"Daily High\" + RESET);","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" System.out.print(RED + \"Daily Low\" + RESET);","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"EquityName\");","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" System.out.println();","lastModifiedDate":"2023-10-09"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" public void printStocksInfo(WatchList watchList) {","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" for (Stock stock: watchList.getStocks()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" String symbol \u003d StringUtils.rightPad(stock.getSymbol(), 10);","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" String market \u003d StringUtils.rightPad(stock.getExchange(), 10);","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" String price \u003d YELLOW + StringUtils.rightPad(stock.getPrice(), 10) + RESET;","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" String dayHigh \u003d GREEN + StringUtils.rightPad(stock.getDayHigh(), 15) + RESET;","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" String dayLow \u003d RED + StringUtils.rightPad(stock.getDayLow(), 14) + RESET;","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" String name \u003d StringUtils.rightPad(stock.getStockName(), 10);","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":" System.out.println(symbol + market + price + dayHigh + dayLow + name);","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":" public void printAddStock(String stockName) {","lastModifiedDate":"2023-10-09"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"You have successfully added:\");","lastModifiedDate":"2023-10-09"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" System.out.println(stockName);","lastModifiedDate":"2023-10-09"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Use Watchlist to view it!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":" public void printDeleteStock(String stockName) {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"You have successfully deleted: \");","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":" System.out.println(stockName);","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Use watchlist command to view updated Watchlist\");","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" public void printAddedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have added an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"to the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" public void printDeletedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have removed an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"from the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" public void printBudgetBeforeUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been updated:\\nOld initial budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":" Budget.getInitialBudgetString() + \"\\nOld current budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" showMessage(\"New initial budget: \" + Budget.getInitialBudgetString() +","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" \"\\nNew current budget: \" + Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" showMessage(\"You have exceeded your budget, please update to a larger budget or \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" \"reset the current budget to initial budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterDeduction() {","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" message.append(\"You have exceeded your current budget by: \");","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" } else if (Budget.getCurrentBudget() \u003e 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" message.append(\"Your remaining budget for the month is: \");","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" message.append(Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" showMessage(message.toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"ryan1604"},"content":" public void printBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"ryan1604"},"content":" showMessage(\"You have a remaining budget of \" + Budget.getCurrentBudgetString() + \".\");","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"ryan1604"},"content":" public void printDeleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been deleted.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":" public void printResetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been reset to \" + Budget.getInitialBudgetString() + \".\");","lastModifiedDate":"2023-10-23"},{"lineNumber":149,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":151,"author":{"gitId":"wwweert123"},"content":" public void printDisplayChart(String type, String chart) {","lastModifiedDate":"2023-10-24"},{"lineNumber":152,"author":{"gitId":"wwweert123"},"content":" showMessage(\"Displaying \" + chart + \"chart for \" + type);","lastModifiedDate":"2023-10-24"},{"lineNumber":153,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":154,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"ryan1604"},"content":" public void printOverview(String... args) {","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"ryan1604"},"content":" String balance \u003d args[0];","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"ryan1604"},"content":" String income \u003d args[1];","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"ryan1604"},"content":" String expense \u003d args[2];","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"ryan1604"},"content":" String budget \u003d args[3];","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"ryan1604"},"content":" String reminders \u003d args[4];","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Here is an overview of your financials:\\n\" + \"Total balance: \" + balance + \"\\n\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"ryan1604"},"content":" \"Highest income: \" + income + \"\\n\" + \"Highest expense: \" + expense + \"\\n\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"ryan1604"},"content":" \"Remaining budget for the month: \" + budget + \"\\n\\n\" + \"Reminders:\\n\" + reminders);","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"ryan1604"},"content":" public void printSetBudget() {","lastModifiedDate":"2023-10-25"},{"lineNumber":168,"author":{"gitId":"ryan1604"},"content":" showMessage(\"A monthly budget of \" + Budget.getInitialBudgetString() + \" has been set.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":171,"author":{"gitId":"ryan1604"},"content":" public void printBudgetExceedBalance() {","lastModifiedDate":"2023-10-25"},{"lineNumber":172,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Since initial budget exceeds current balance, budget will be reset to current balance.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":174,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":175,"author":{"gitId":"ryan1604"},"content":" public void printBudgetError(String errorType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"ryan1604"},"content":" switch (errorType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":177,"author":{"gitId":"ryan1604"},"content":" case \"delete\":","lastModifiedDate":"2023-10-25"},{"lineNumber":178,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has not been set yet.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":179,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":180,"author":{"gitId":"ryan1604"},"content":" case \"reset\":","lastModifiedDate":"2023-10-25"},{"lineNumber":181,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has not been spent yet.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":183,"author":{"gitId":"ryan1604"},"content":" case \"view\":","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"ryan1604"},"content":" showMessage(\"There is no existing budget.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":185,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":187,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-27"},{"lineNumber":188,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Unknown command\");","lastModifiedDate":"2023-10-25"},{"lineNumber":189,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":49,"NeoMinWei":22,"ryan1604":106,"YFshadaow":14}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortType(CashflowList cashflowList, String type)","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" case \"expense\":","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing expenses\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" return sortExpenses(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" case \"income\":","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing income\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" return sortIncome(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(type + \" Type not found\");","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortExpenses(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e expensesByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" String key \u003d e.getExpenseType().toString().toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d expensesByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" expensesByCat.put(key, value);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" return expensesByCat;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortIncome(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e incomeByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Income) {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" String key \u003d e.getIncomeType().toString().toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d incomeByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" incomeByCat.put(key, value);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" return incomeByCat;","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":46,"NeoMinWei":8,"ryan1604":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":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" public static void displayChart(String chartType, Map\u003cString, Double\u003e cashFlowByCat, String type)","lastModifiedDate":"2023-10-24"},{"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(cashFlowByCat, type);","lastModifiedDate":"2023-10-24"},{"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(cashFlowByCat, type);","lastModifiedDate":"2023-10-24"},{"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(chartType + \" Chart Type Not Found\");","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" public static void displayPieChart (Map\u003cString, Double\u003e expensesByCat, String type) {","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" PieChart chart \u003d new PieChartBuilder().width(800).height(600).title(type).build();","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" Color[] sliceColors \u003d new Color[] {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" new Color(21, 224, 14),","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" new Color(62, 154, 230),","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" new Color(236, 186, 110),","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" new Color(243, 159, 242),","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" new Color(246, 182, 197),","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" new Color(210, 24, 24),","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" new Color(211, 164, 8),","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" };","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setSeriesColors(sliceColors);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" for (Map.Entry\u003cString, Double\u003e set: expensesByCat.entrySet()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(set.getKey(), set.getValue());","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Pie Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" // Show it","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","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":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" public static void displayBarChart (Map\u003cString, Double\u003e expensesByCat, String type) {","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" CategoryChart chart \u003d new CategoryChartBuilder().width(800).height(600)","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" .title(type).xAxisTitle(\"Type\").yAxisTitle(\"Value\").build();","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNW);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setHasAnnotations(true);","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" assert !expensesByCat.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" // Series","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" List\u003cDouble\u003e values \u003d new ArrayList\u003cDouble\u003e(expensesByCat.values());","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" List\u003cString\u003e keys \u003d new ArrayList\u003cString\u003e(expensesByCat.keySet());","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(\"Expense\", keys, values);","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Bar Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":79,"ryan1604":2}},{"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/cashflow/BudgetTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(500);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" assertTrue(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" @Order(2)","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" public void testNewExpense() {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand testExpense \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 50 /t dining\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" testExpense.execute();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" assertEquals(450, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"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":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" @Order(3)","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" public void testUpdateBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(300);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" assertEquals(300, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" assertEquals(250, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(1000);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" assertEquals(950, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" @Order(4)","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" public void testSetInitialBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" Budget.setInitialBudget(1500);","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" @Order(5)","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" public void testUpdateCurrentBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" Budget.updateCurrentBudget(50);","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" @Order(6)","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" public void testResetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" Budget.resetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" @Order(7)","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" public void testDeleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" assertEquals(0, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" assertEquals(0, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" @Order(8)","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" public void testLoadBudget() {","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" Budget.load(100, 100);","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" assertEquals(100, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" assertEquals(100, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":3,"ryan1604":82}},{"path":"src/test/java/seedu/financialplanner/cashflow/CashflowListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, \"part time job\");","lastModifiedDate":"2023-10-28"},{"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":" assertEquals(\"part time job\", testIncome.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" testList.addIncome(15.999, IncomeType.INVESTMENTS, 0, \"AAPL\");","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" testIncome \u003d testList.list.get(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testIncome.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testIncome instanceof Income);","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"16.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(IncomeType.INVESTMENTS, testIncome.getIncomeType());","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testIncome.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"31.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"AAPL\", testIncome.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(10, ExpenseType.DINING, 0, \"double mcspicy\");","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" Cashflow testExpense \u003d testList.list.get(2);","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"10.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.DINING, testExpense.getExpenseType());","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"21.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"double mcspicy\", testExpense.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(19.999, ExpenseType.ENTERTAINMENT, 30, \"netflix\");","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" testExpense \u003d testList.list.get(3);","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"20.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.ENTERTAINMENT, testExpense.getExpenseType());","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"1.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"netflix\", testExpense.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" void testDeleteIncomeAndExpense() {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithCategory(CashflowCategory.INCOME, 2);","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(3, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" double roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-15.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithoutCategory(1);","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(2, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-30.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithCategory(CashflowCategory.EXPENSE, 2);","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(1, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-10.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithoutCategory(1);","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"0.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":86,"ryan1604":2,"YFshadaow":1}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"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":"wwweert123"},"content":" private WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"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":{"wwweert123":1,"NeoMinWei":28,"YFshadaow":6}},{"path":"src/test/java/seedu/financialplanner/commands/BudgetCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Order;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.TestMethodOrder;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"@TestMethodOrder(OrderAnnotation.class)","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"public class BudgetCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" @Order(1)","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" public void testSetBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" Cashflow.setBalance(2000);","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b 1000\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" assertTrue(Budget.hasBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" @Order(2)","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" public void testUpdateBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget update /b 1500\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" @Order(3)","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public void testResetBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget reset\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" AddCashflowCommand testExpense \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 50 /t dining\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" testExpense.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" Budget.deduct(50);","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" Cashflow.setBalance(1000);","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudgetExceedBalance \u003d new BudgetCommand(Parser.parseRawCommand(\"budget reset\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" testBudgetExceedBalance.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" @Order(4)","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" public void testDeleteBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget delete\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" @Order(5)","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" public void testInvalidCommandFormat_throwsException() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testExtraArgument \u003d new BudgetCommand(Parser.parseRawCommand(\"budget\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" \" set /b 500 /t sdf\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Unknown extra argument: t\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testInvalidCommand \u003d new BudgetCommand(Parser.parseRawCommand(\"budget random /b 5\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget command must be one of the following: set, update, \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" \"delete, reset, view.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(5);","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testSetAndHasBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b 55\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"There is an existing budget, did you mean update?\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testUpdateAndNoBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget update \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" \"/b 500\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"There is no budget set yet, did you mean set?\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testMissingArgument \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Missing /b argument.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" @Order(6)","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" public void testInvalidBudget_throwsException() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testStringBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b f\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget must be a number.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testNegativeBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b -5\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget should be greater than 0.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":" Cashflow.clearBalance();","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudgetExceedBalance \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b 500\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget should be lower than total balance.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":120}},{"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.junit.jupiter.api.MethodOrderer;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.Order;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.TestMethodOrder;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"@TestMethodOrder(MethodOrderer.OrderAnnotation.class)","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"class WatchListTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" @Order(1)","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" void fetchFMPStockPrices() throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" wl.fetchFMPStockPrices();","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" ArrayList\u003cStock\u003e stocks \u003d wl.getStocks();","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" assertNotNull(stocks.get(0).getPrice());","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" assertNotNull(stocks.get(1).getPrice());","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" @Order(2)","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" void addStock() throws Exception {","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" String stockCode \u003d \"GME\";","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" assertEquals(\"Gamestop Corporation - Class A\", wl.addStock(stockCode));","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" @Order(3)","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" void deleteStock() throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" String stockCode \u003d \"GME\";","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" assertEquals(\"Gamestop Corporation - Class A\", wl.deleteStock(stockCode));","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"wwweert123":42}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"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":" protected Storage storage \u003d Storage.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" public void loadValidData() throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" storage.load(\"src/test/testData/ValidData.txt\");","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" String actual \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" String expected \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public void loadInvalidData_userInputNo() {","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":"ryan1604"},"content":" () -\u003e storage.load(\"src/test/testData/InvalidData.txt\"));","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":" storage.save(String.valueOf(testFolder.resolve(\"temp.txt\")));","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":" assertThrows(FinancialPlannerException.class, () -\u003e storage.save(\"\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"YFshadaow"},"content":" private void getTestData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.load(new Income(123.12, IncomeType.ALLOWANCE, 0, null));","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.load(new Expense(100, ExpenseType.SHOPPING, 30, \"shopee\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":12,"ryan1604":46,"YFshadaow":10}}] +[{"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/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":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"**Xchart (A Simple Charting Library for Java)**","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"- author: KNOWN","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"- source: [https://knowm.org/open-source/xchart/]()","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"**JSON Simple (simple Java toolkit for encoding and decoding JSON)**","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"- author: Yidong Fang (Google Code)","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"- source: [https://code.google.com/archive/p/json-simple/]()","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"**Apache Common Langs 3**","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"- author: Apache Commons","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"- source: [https://commons.apache.org/proper/commons-lang/]()","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"**Alpha Vantage Stock Market API**","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"- author: Alpha Vantage","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"- source: [https://www.alphavantage.co/]()","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"**round() method in Cashflow.java**","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" - author: mhadidg","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" - source: [https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places]()","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":"**capitalize() method in Cashflow.java**","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" - author: Nick Bolton","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" - source: [https://stackoverflow.com/questions/1892765/how-to-capitalize-the-first-character-of-each-word-in-a-string]()","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":"**DG adapted from**","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"* [Addressbook-level3](https://github.com/se-edu/addressbook-level3)","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"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":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"### Storage Component","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"API: `Storage.java`","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":"![](images/Storage.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"* The storage component loads data from the saved text files when the application starts, and saves the data to the","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" text files when the application exits.","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"* The storage class uses the static methods in LoadData and SaveData to load and save data respectively.","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"* The `load` method in LoadData reads the `data.txt` file and loads any existing Income, Expense and Budget into the application.","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"* The `save` method in SaveData saves all Incomes, Expenses and existing Budget into the `data.txt` file.","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"#### Design considerations:","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":"* There are 2 main ways to implement the storage, one is to save the data after every command, and the other is to save ","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":"the data one upon exiting the program with the `exit` command.","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"* Saving the data once upon exit (Currently implemented):","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" * Advantage: Better efficiency and performance of the program.","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" * Disadvantage: If the program crashes or exits incorrectly, data will not be saved.","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":"* Saving the data after every command:","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" * Advantage: Changes are saved after every command.","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" * Disadvantage: Executing command might slow down the program when there is a large amount of data to be saved.","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":"### Visualization Feature ","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":"This feature is implemented with the help of [XChart](https://knowm.org/open-source/xchart/), a simple charting library for Java by Knowm.","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":"By typing in the vis command with the appropriate arguments (/s and /t), users will be able to visualize their income or expense ","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":"using visualization tools (Piechart, Bar Chart)","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":"Demo: ","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":"`vis /t expense /c pie`","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":"Output","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":"`Displaying piechart for expense`","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":"A message will be shown telling you that the chart is being displayed","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visOutput.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":"This feature was implemented with the help of three different classes.","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":"They are namely: Visualizer, Categorizer, VisCommand (Inherits from abstract Command Class)","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":"VisCommand\u0027s Role: ","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":"1) Read the parameters of the vis command entered by the user","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":"- `/t` Reads the type of cashflow that the user wants to visualize (income/expense)","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":"- `/c` Reads the type of visualization tools the user wants (piechart/barchart)","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":"2) Calls the Cateorgizer to sort cashflow (Income/Expense) according to type","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":"3) Calls the Visualizer to display the chart to the user","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":"Categorizer\u0027s Role: ","lastModifiedDate":"2023-10-24"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":"According to the cashflow type (Income/Expense) arugment passed in, the Categorizer sorts the ","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":"specified cashflow entry according to type using a Hashmap which is returned and used by the Visualizer","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":"Visualizer\u0027s Role: ","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":"According to the chart type (Pie/Bar) argument and the Hashmap obtained from the categorizer passed in, ","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":"the visualizer displays the specified visualization chart by calling the charting library Xchart.","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"wwweert123"},"content":"### Class Diagram","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visualisationClass.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":"### Sequence Diagram ","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"wwweert123"},"content":"Overall ","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visualisationSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"wwweert123"},"content":"Categorizer","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":"![](images/vis/categorizerSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"wwweert123"},"content":"Visualizer","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":"![](images/vis/visualizerSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":"### Add income/expense feature","lastModifiedDate":"2023-10-24"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":"The add income/expense command has 2 compulsory arguments `/t` and `/a` and 1 optional argument `/r`.","lastModifiedDate":"2023-10-24"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":"Example:","lastModifiedDate":"2023-10-24"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":"add income /a 100 /t salary /r 30","lastModifiedDate":"2023-10-24"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":128,"author":{"gitId":"NeoMinWei"},"content":"Below are the steps that shows the implementation of add income/expense.","lastModifiedDate":"2023-10-24"},{"lineNumber":129,"author":{"gitId":"NeoMinWei"},"content":"#### Step 1","lastModifiedDate":"2023-10-24"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":"An instantiated AddCashflowCommand class gets the instance of CashflowList.","lastModifiedDate":"2023-10-24"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":132,"author":{"gitId":"NeoMinWei"},"content":"This allows the AddCashflowCommand instance to access the methods of CashflowList.","lastModifiedDate":"2023-10-24"},{"lineNumber":133,"author":{"gitId":"NeoMinWei"},"content":"#### Step 2","lastModifiedDate":"2023-10-24"},{"lineNumber":134,"author":{"gitId":"NeoMinWei"},"content":"The AddCashflowCommand instance then calls addIncome() or addExpense(), depending on what `category` is initialised as.","lastModifiedDate":"2023-10-24"},{"lineNumber":135,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":136,"author":{"gitId":"NeoMinWei"},"content":"addIncome() or addExpense() instantiates an Income or Expense object respectively.","lastModifiedDate":"2023-10-24"},{"lineNumber":137,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":"Example:","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"NeoMinWei"},"content":"switch (category) {","lastModifiedDate":"2023-10-24"},{"lineNumber":141,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addIncome(amount, incomeType, recur);","lastModifiedDate":"2023-10-24"},{"lineNumber":143,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-24"},{"lineNumber":145,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addExpense(amount, expenseType, recur);","lastModifiedDate":"2023-10-24"},{"lineNumber":146,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":147,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-24"},{"lineNumber":148,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-24"},{"lineNumber":149,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":150,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":151,"author":{"gitId":"NeoMinWei"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":152,"author":{"gitId":"NeoMinWei"},"content":"#### Step 3","lastModifiedDate":"2023-10-24"},{"lineNumber":153,"author":{"gitId":"NeoMinWei"},"content":"The instantiated income/expense then updates the overall balance through addIncomeValue() or addExpenseValue().","lastModifiedDate":"2023-10-24"},{"lineNumber":154,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":155,"author":{"gitId":"NeoMinWei"},"content":"The income/expense object is also added to the list in Cashflowlist which contains all incomes/expenses.","lastModifiedDate":"2023-10-24"},{"lineNumber":156,"author":{"gitId":"NeoMinWei"},"content":"#### Step 4","lastModifiedDate":"2023-10-24"},{"lineNumber":157,"author":{"gitId":"NeoMinWei"},"content":"The added income/expense is then displayed to the user through the Ui.","lastModifiedDate":"2023-10-24"},{"lineNumber":158,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":159,"author":{"gitId":"NeoMinWei"},"content":"#### Diagrams","lastModifiedDate":"2023-10-24"},{"lineNumber":160,"author":{"gitId":"NeoMinWei"},"content":"Given below is the class diagram showing the class structure of the add income/expense mechanism:","lastModifiedDate":"2023-10-24"},{"lineNumber":161,"author":{"gitId":"NeoMinWei"},"content":"![](images/CashflowClassDiagram.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":163,"author":{"gitId":"NeoMinWei"},"content":"Given below is the sequence diagram showing the add income/expense mechanism:","lastModifiedDate":"2023-10-24"},{"lineNumber":164,"author":{"gitId":"NeoMinWei"},"content":"![](images/AddCashflowSequence.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"ryan1604"},"content":"### Budget Feature","lastModifiedDate":"2023-10-24"},{"lineNumber":168,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"ryan1604"},"content":"This feature has 5 functions, `set`, `update`, `delete`, `reset`, and `view`.","lastModifiedDate":"2023-10-24"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":171,"author":{"gitId":"ryan1604"},"content":"![](images/Budget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":172,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":173,"author":{"gitId":"ryan1604"},"content":"The BudgetCommand will execute the appropriate command and print through `Budget.java` and prints any message to the user through `Ui.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":174,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":175,"author":{"gitId":"ryan1604"},"content":"#### Set and update budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":177,"author":{"gitId":"ryan1604"},"content":"Example:","lastModifiedDate":"2023-10-24"},{"lineNumber":178,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":179,"author":{"gitId":"ryan1604"},"content":"budget set /b 500","lastModifiedDate":"2023-10-24"},{"lineNumber":180,"author":{"gitId":"ryan1604"},"content":"budget update /b 1000","lastModifiedDate":"2023-10-24"},{"lineNumber":181,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":182,"author":{"gitId":"ryan1604"},"content":"The \u0027/b\u0027 is followed by the budget amount. The first line will set the budget by calling `setBudget(500)` method in `Budget.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":183,"author":{"gitId":"ryan1604"},"content":"The second line updates the budget by adding or subtracting the difference between the initial and updated amount to the ","lastModifiedDate":"2023-10-24"},{"lineNumber":184,"author":{"gitId":"ryan1604"},"content":"initial and current budget. This is done through `updateBudget(500)` method in `Budget.java`. Both functions can be seen ","lastModifiedDate":"2023-10-24"},{"lineNumber":185,"author":{"gitId":"ryan1604"},"content":"in the diagram above","lastModifiedDate":"2023-10-24"},{"lineNumber":186,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":187,"author":{"gitId":"ryan1604"},"content":"#### Delete budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":188,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":189,"author":{"gitId":"ryan1604"},"content":"![](images/deleteBudget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":190,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"ryan1604"},"content":"The budget will be deleted by setting the initial and current budget to 0 through the `deleteBudget()` method in `Budget.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":193,"author":{"gitId":"ryan1604"},"content":"Example: `budget delete`","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":195,"author":{"gitId":"ryan1604"},"content":"#### Reset budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":196,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":197,"author":{"gitId":"ryan1604"},"content":"![](images/resetBudget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":198,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":199,"author":{"gitId":"ryan1604"},"content":"The budget will be reset by resetting the current budget to the initial budget through the `resetBudget()` method in `Budget.java`.","lastModifiedDate":"2023-10-24"},{"lineNumber":200,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":201,"author":{"gitId":"ryan1604"},"content":"Example: `budget reset`","lastModifiedDate":"2023-10-24"},{"lineNumber":202,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"ryan1604"},"content":"#### View budget:","lastModifiedDate":"2023-10-25"},{"lineNumber":204,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":205,"author":{"gitId":"ryan1604"},"content":"![](images/viewBudget.png)","lastModifiedDate":"2023-10-24"},{"lineNumber":206,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":207,"author":{"gitId":"ryan1604"},"content":"The current budget will be shown to the user through the `Ui`.","lastModifiedDate":"2023-10-24"},{"lineNumber":208,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":209,"author":{"gitId":"ryan1604"},"content":"Example: `budget view`","lastModifiedDate":"2023-10-24"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":212,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":213,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":217,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":219,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":221,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":223,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":224,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":225,"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":226,"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":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":228,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":230,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":232,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":234,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":236,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":238,"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":{"wwweert123":73,"NeoMinWei":49,"-":44,"ryan1604":72}},{"path":"docs/Style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T1 #7777DB","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T2 #5252CE","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"!define LOGIC_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"NeoMinWei":5}},{"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":"ryan1604"},"content":"## Table of contents","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"* [Introduction](#introduction)","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"* [Quick start](#quick-start)","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"* [Features](#features)","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":" * [Budget](#budget)","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" * [Setting budget](#setting-a-budget-budget-set)","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" * [Updating budget](#updating-budget-budget-update)","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" * [Resetting budget](#resetting-budget-budget-reset)","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" * [Deleting budget](#deleting-budget-budget-delete)","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" * [Viewing budget](#viewing-budget-budget-view)","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" * [Displaying Overview](#displaying-overview-overview)","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" * [View Balance](#viewing-balance-balance)","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" * [WatchList](#viewing-watchlist-watchlist)","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" * [Adding Stock](#adding-stock-to-watchlist-addstock)","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" * [Deleting Stock](#deleting-budget-budget-delete)","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" * [Visualization](#Visualization)","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" * [Exiting the program](#exiting-the-program-exit)","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" * [Saving data](#saving-the-data)","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" * [Loading data](#loading-the-data)","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"* [FAQ](#faq)","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"* [Command Summary](#command-summary)","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"Financial Planner is a Command Line Interface (CLI) application for managing your finances conveniently. ","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"It is optimized for use via the CLI and leverages your expertise in CLI and your ability to type fast and gives ","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"you a one-stop interface to access a plethora of features to manage your finances.","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"{Give steps to get started quickly}","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"1. Down the latest version of `Duke` from [here](http://link.to/duke).","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"{Give detailed description of each feature}","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":"### Budget","lastModifiedDate":"2023-10-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"#### Setting a budget: `budget set`","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"Sets a monthly budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"Format: `budget set /b BUDGET`","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"* `BUDGET` has to be a positive number.","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget set /b 500`","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":"A monthly budget of 500.00 has been set.","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"#### Updating budget: `budget update`","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"Updates budget to a new value.","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"Format: `budget update /b BUDGET`","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":"* `Budget` has to be a positive number.","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":"* There has to be an existing budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget update /b 1000`","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"Budget has been updated:","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":"Old initial budget: 500.00","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":"Old current budget: 500.00","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"New initial budget: 1000.00","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":"New current budget: 1000.00","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":"#### Resetting budget: `budget reset`","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":"Resets current budget to initial budget if they are different.","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":"Format: `budget reset`","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":"* Budget will be reset to initial budget or current balance, whichever is lower.","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget reset`","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"Budget has been reset to 1000.00.","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":"#### Deleting budget: `budget delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":"Deletes existing budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"Format: `budget delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":"Budget has been deleted.","lastModifiedDate":"2023-10-28"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":"#### Viewing budget: `budget view`","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":"View existing budget.","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":"Format: `budget view`","lastModifiedDate":"2023-10-28"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":"Example of usage: `budget view`","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":"You have a remaining budget of 1000.00.","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":"### Displaying overview: `overview`","lastModifiedDate":"2023-10-28"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":"Displays an overview of user\u0027s financials.","lastModifiedDate":"2023-10-28"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":"Format: `overview`","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":"Example of usage: `overview`","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":"Here is an overview of your financials:","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":"Total balance: 3790.00","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"ryan1604"},"content":"Highest income: 5000.00 Category: Salary","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"ryan1604"},"content":"Highest expense: 500.00 Category: Others","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"ryan1604"},"content":"Remaining budget for the month: 1000.00","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"ryan1604"},"content":"Reminders:","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":"No reminders added yet.","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":"### Viewing balance: `balance`","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"ryan1604"},"content":"View user\u0027s current balance.","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"ryan1604"},"content":"Format: `balance`","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"ryan1604"},"content":"Example of usage: `balance`","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"ryan1604"},"content":"Example output:","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"ryan1604"},"content":"Balance: 3790.00","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"ryan1604"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"wwweert123"},"content":"### Viewing Watchlist: `watchlist`","lastModifiedDate":"2023-10-29"},{"lineNumber":162,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":163,"author":{"gitId":"wwweert123"},"content":"View your current watchlist with stocks that you are interested in with the exchanges shown as well","lastModifiedDate":"2023-10-29"},{"lineNumber":164,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":165,"author":{"gitId":"wwweert123"},"content":"Default watchlist: AAPL, GOOGL","lastModifiedDate":"2023-10-29"},{"lineNumber":166,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":167,"author":{"gitId":"wwweert123"},"content":"Format: `watchlist`","lastModifiedDate":"2023-10-29"},{"lineNumber":168,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":169,"author":{"gitId":"wwweert123"},"content":"Example of usage: `watchlist`","lastModifiedDate":"2023-10-29"},{"lineNumber":170,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":171,"author":{"gitId":"wwweert123"},"content":"Example of output:","lastModifiedDate":"2023-10-29"},{"lineNumber":172,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":173,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":174,"author":{"gitId":"wwweert123"},"content":"Symbol Market Price Daily High Daily Low EquityName","lastModifiedDate":"2023-10-29"},{"lineNumber":175,"author":{"gitId":"wwweert123"},"content":"AAPL NASDAQ 168.22 168.96 166.84 Apple Inc ","lastModifiedDate":"2023-10-29"},{"lineNumber":176,"author":{"gitId":"wwweert123"},"content":"GOOGL NASDAQ 122.17 123.31 120.2057 Alphabet Inc - Class A","lastModifiedDate":"2023-10-29"},{"lineNumber":177,"author":{"gitId":"wwweert123"},"content":"GME NYSE 13.12 13.615 13.02 Gamestop Corporation - Class A","lastModifiedDate":"2023-10-29"},{"lineNumber":178,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":179,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":180,"author":{"gitId":"wwweert123"},"content":"### Adding Stock to Watchlist: `addstock`","lastModifiedDate":"2023-10-29"},{"lineNumber":181,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":182,"author":{"gitId":"wwweert123"},"content":"Add a stock that you are interested in monitoring into your personal WatchList","lastModifiedDate":"2023-10-29"},{"lineNumber":183,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":184,"author":{"gitId":"wwweert123"},"content":"Format: `addstock /s STOCKCODE`","lastModifiedDate":"2023-10-29"},{"lineNumber":185,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":186,"author":{"gitId":"wwweert123"},"content":"Example of usage: `addstock /s META`","lastModifiedDate":"2023-10-29"},{"lineNumber":187,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":188,"author":{"gitId":"wwweert123"},"content":"Example of output:","lastModifiedDate":"2023-10-29"},{"lineNumber":189,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":190,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":191,"author":{"gitId":"wwweert123"},"content":"You have successfully added:","lastModifiedDate":"2023-10-29"},{"lineNumber":192,"author":{"gitId":"wwweert123"},"content":"Meta Platforms Inc - Class A","lastModifiedDate":"2023-10-29"},{"lineNumber":193,"author":{"gitId":"wwweert123"},"content":"Use Watchlist to view it!","lastModifiedDate":"2023-10-29"},{"lineNumber":194,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":195,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":196,"author":{"gitId":"wwweert123"},"content":"### Deleting Stock from Watchlist: `deletestock`","lastModifiedDate":"2023-10-29"},{"lineNumber":197,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":198,"author":{"gitId":"wwweert123"},"content":"Delete a stock that you are no longer interested in monitoring from your personal WatchList","lastModifiedDate":"2023-10-29"},{"lineNumber":199,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":200,"author":{"gitId":"wwweert123"},"content":"Format: `deletestock /s STOCKCODE`","lastModifiedDate":"2023-10-29"},{"lineNumber":201,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":202,"author":{"gitId":"wwweert123"},"content":"Example of usage: `deletestock /s META`","lastModifiedDate":"2023-10-29"},{"lineNumber":203,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":204,"author":{"gitId":"wwweert123"},"content":"Example of output:","lastModifiedDate":"2023-10-29"},{"lineNumber":205,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":206,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":207,"author":{"gitId":"wwweert123"},"content":"You have successfully deleted: ","lastModifiedDate":"2023-10-29"},{"lineNumber":208,"author":{"gitId":"wwweert123"},"content":"Meta Platforms Inc - Class A","lastModifiedDate":"2023-10-29"},{"lineNumber":209,"author":{"gitId":"wwweert123"},"content":"Use watchlist command to view updated Watchlist","lastModifiedDate":"2023-10-29"},{"lineNumber":210,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":211,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":212,"author":{"gitId":"wwweert123"},"content":"### Visualizing your cashflow: `vis`","lastModifiedDate":"2023-10-29"},{"lineNumber":213,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":214,"author":{"gitId":"wwweert123"},"content":"Using this command to visualize your income or expenses in a pie chart or bar chart","lastModifiedDate":"2023-10-29"},{"lineNumber":215,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":216,"author":{"gitId":"wwweert123"},"content":"Format: `vis /t TYPE /c TOOL`","lastModifiedDate":"2023-10-29"},{"lineNumber":217,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":218,"author":{"gitId":"wwweert123"},"content":"Example of usage: `vis /t income /c pie`","lastModifiedDate":"2023-10-29"},{"lineNumber":219,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":220,"author":{"gitId":"wwweert123"},"content":"Example of output:","lastModifiedDate":"2023-10-29"},{"lineNumber":221,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":222,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":223,"author":{"gitId":"wwweert123"},"content":"Displaying piechart for expense","lastModifiedDate":"2023-10-29"},{"lineNumber":224,"author":{"gitId":"wwweert123"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":225,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":226,"author":{"gitId":"wwweert123"},"content":"![](images/vis/visOutput.png)","lastModifiedDate":"2023-10-29"},{"lineNumber":227,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":228,"author":{"gitId":"ryan1604"},"content":"### Exiting the program: `exit`","lastModifiedDate":"2023-10-28"},{"lineNumber":229,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":230,"author":{"gitId":"ryan1604"},"content":"Exits the program.","lastModifiedDate":"2023-10-28"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":232,"author":{"gitId":"ryan1604"},"content":"Format: `exit`","lastModifiedDate":"2023-10-28"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":234,"author":{"gitId":"ryan1604"},"content":"### Saving the data","lastModifiedDate":"2023-10-28"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":236,"author":{"gitId":"ryan1604"},"content":"Data is automatically saved upon exiting the program using the `exit` command. Closing the program without exiting ","lastModifiedDate":"2023-10-28"},{"lineNumber":237,"author":{"gitId":"ryan1604"},"content":"will not save the data.","lastModifiedDate":"2023-10-28"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":239,"author":{"gitId":"ryan1604"},"content":"### Loading the data","lastModifiedDate":"2023-10-28"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":241,"author":{"gitId":"ryan1604"},"content":"Existing data will be automatically loaded when the program starts up.","lastModifiedDate":"2023-10-28"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":243,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":245,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer? ","lastModifiedDate":"2020-05-24"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":247,"author":{"gitId":"-"},"content":"**A**: {your answer here}","lastModifiedDate":"2020-05-24"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":249,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":251,"author":{"gitId":"-"},"content":"{Give a \u0027cheat sheet\u0027 of commands here}","lastModifiedDate":"2020-05-24"},{"lineNumber":252,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":253,"author":{"gitId":"ryan1604"},"content":"| Action | Format |","lastModifiedDate":"2023-10-28"},{"lineNumber":254,"author":{"gitId":"ryan1604"},"content":"|----------------------|---------------------------|","lastModifiedDate":"2023-10-28"},{"lineNumber":255,"author":{"gitId":"ryan1604"},"content":"| **Set budget** | `budget set /b BUDGET` |","lastModifiedDate":"2023-10-28"},{"lineNumber":256,"author":{"gitId":"ryan1604"},"content":"| **Update budget** | `budget update /b BUDGET` |","lastModifiedDate":"2023-10-28"},{"lineNumber":257,"author":{"gitId":"ryan1604"},"content":"| **Reset budget** | `budget reset` |","lastModifiedDate":"2023-10-28"},{"lineNumber":258,"author":{"gitId":"ryan1604"},"content":"| **Delete budget** | `budget delete` |","lastModifiedDate":"2023-10-28"},{"lineNumber":259,"author":{"gitId":"ryan1604"},"content":"| **View budget** | `budget view` |","lastModifiedDate":"2023-10-28"},{"lineNumber":260,"author":{"gitId":"ryan1604"},"content":"| **Display Overview** | `overview` |","lastModifiedDate":"2023-10-28"},{"lineNumber":261,"author":{"gitId":"ryan1604"},"content":"| **View balance** | `balance` |","lastModifiedDate":"2023-10-28"},{"lineNumber":262,"author":{"gitId":"ryan1604"},"content":"| **Exit program** | `exit` |","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"wwweert123":71,"-":37,"ryan1604":154}},{"path":"docs/diagrams/AddCashflowSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"participant AddCashflowCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"participant CashflowList","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"participant Income","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"participant Expense","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"participant Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"-\u003e AddCashflowCommand: execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"AddCashflowCommand -\u003e CashflowList: getInstance()","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"CashflowList -\u003e Ui: getInstance()","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"alt income","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand -\u003e CashflowList: addIncome(amount, incomeType, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" create Income","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Income: Income(value, type, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" Income -\u003e Income: addIncomeValue()","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e CashflowList: add(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Ui: printAddedCashflow(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":"else expense","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand -\u003e CashflowList: addExpense(amount, incomeType, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" create Expense","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Expense: Expense(value, type, recur)","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" Expense -\u003e Expense: addExpenseValue()","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e CashflowList: add(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" CashflowList -\u003e Ui: printAddedCashflow(toAdd)","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":"else invalid command","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"NeoMinWei":31}},{"path":"docs/diagrams/Budget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"-\u003e BudgetCommand: execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"BudgetCommand -\u003e Ui: getInstance()","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"alt set","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: setBudget(budget)","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printSetBudget()","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"else update","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetBeforeUpdate()","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: updateBudget(budget)","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetAfterUpdate()","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"else delete","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" ref over BudgetCommand: DeleteBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"else reset","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" ref over BudgetCommand: ResetBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"else view","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" ref over BudgetCommand: ViewBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"else invalid command","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":27}},{"path":"docs/diagrams/CashflowClassDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"\u0027https://plantuml.com/class-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"skinparam classAttributeIconSize 0","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"hide empty members","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"!include style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"skinparam ClassBackgroundColor STORAGE_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"Class \"{abstract}\\nCashflow\" as Cashflow","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"Class Expense extends Cashflow","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"Class Income extends Cashflow","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"Class Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"Class CashflowList {","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" +addIncome(double, IncomeType, int)","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" +addExpense(double, ExpenseType, int)","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"Class AddCashflowCommand #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":"enum \"\u003c\u003cenumeration\u003e\u003e\\nExpenseType\" as ExpenseType","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"enum \"\u003c\u003cenumeration\u003e\u003e\\nIncomeType\" as IncomeType","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":"CashflowList -right-\u003e \"1\" Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":"AddCashflowCommand --\u003e \"1\" CashflowList","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":"CashflowList --\u003e \"*\" Cashflow","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":"CashflowList ..\u003e Income","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":"CashflowList ..\u003e Expense","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"NeoMinWei":28}},{"path":"docs/diagrams/Storage.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"\u0027https://plantuml.com/class-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"!include style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"skinparam ClassBackgroundColor STORAGE_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"package Storage as StoragePackage {","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"Class Storage","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nLoadData\" as LoadData","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nSaveData\" as SaveData","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"Class CashflowList","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nBudget\" as Budget","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"Class \"{abstract}\\nCashflow\" as Cashflow","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"Class \"\u003c\u003cenumeration\u003e\u003e\\nExpenseType\" as ExpenseType","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"Class \"\u003c\u003cenumeration\u003e\u003e\\nIncomeType\" as IncomeType","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"Class Ui","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"Class FinancialPlanner #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"FinancialPlanner --\u003e Storage","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"Storage .right.-\u003e LoadData: uses \u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"Storage .left.\u003e SaveData: uses \u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"SaveData --\u003e CashflowList","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"SaveData ..\u003e Budget","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"SaveData ..\u003e Cashflow","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"LoadData --\u003e CashflowList","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e Budget","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e ExpenseType","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e IncomeType","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"LoadData ..\u003e Cashflow","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"LoadData -right-\u003e Ui: prints message \u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":35}},{"path":"docs/diagrams/deleteBudget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"mainframe sd DeleteBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"alt hasBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: deleteBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printDeleteBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"else else","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"delete\")","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":16}},{"path":"docs/diagrams/resetBudget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"mainframe sd ResetBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"alt spentBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" opt initialBudgetExceedBalance","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: setInitialBudget(balance);","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetExceedBalance()","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" end","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Budget: resetBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printResetBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"else !hasBudget","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"delete\")","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"else else","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"reset\")","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":22}},{"path":"docs/diagrams/style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"/\u0027","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":" \u0027Commonly used styles and colors across diagrams.","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":" \u0027Refer to https://plantuml-documentation.readthedocs.io/en/latest for a more","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":" \u0027comprehensive list of skinparams.","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":" \u0027/","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"\u0027T1 through T4 are shades of the original color from lightest to darkest","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR #1D8900","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T1 #83E769","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T2 #3FC71B","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T3 #166800","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"!define UI_COLOR_T4 #0E4100","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR #3333C4","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T1 #C8C8FA","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T2 #6A6ADC","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"!define LOGIC_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR #9D0012","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T1 #F97181","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T2 #E41F36","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T3 #7B000E","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"!define MODEL_COLOR_T4 #51000A","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR #A38300","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T1 #FFE374","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T2 #EDC520","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T3 #806600","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"!define STORAGE_COLOR_T2 #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"!define USER_COLOR #000000","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"skinparam Package {","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" BackgroundColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" FontSize 16","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":"skinparam Class {","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" FontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" FontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" BorderColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" StereotypeFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"skinparam Actor {","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" BorderColor USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" Color USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"skinparam Sequence {","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" MessageAlign center","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" BoxFontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" BoxPadding 0","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" BoxFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"skinparam Participant {","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" FontColor #FFFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" Padding 20","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"skinparam ArrowFontStyle bold","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":"skinparam MinClassWidth 50","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":"skinparam ParticipantPadding 10","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":"skinparam Shadowing false","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"skinparam DefaultTextAlignment center","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"skinparam packageStyle Rectangle","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"hide members","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":"hide circle","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":79}},{"path":"docs/diagrams/viewBudget.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"mainframe sd ViewBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"participant \":BudgetCommand\" as BudgetCommand","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nBudget\" as Budget","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\" as Ui","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"alt hasBudget","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudget()","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"else else","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" BudgetCommand -\u003e Ui: printBudgetError(\"view\")","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"end","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"ryan1604":15}},{"path":"docs/diagrams/vis/categorizerSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"mainframe sd sort cashflow entries","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"autoactivate on","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"participant \":VisCommand\"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nCategorizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nCategorizer\": Categorizer.sortType(cashflowList, type)","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"alt type \u003d\u003d \"expense\"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nCategorizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nCategorizer\": sortExpenses(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":" return","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"else type \u003d\u003d \"income\"","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nCategorizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nCategorizer\": sortIncome(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" return","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"end","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"return sortedCashflow: Map\u003cString,Double\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"hide footbox","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"wwweert123":24}},{"path":"docs/diagrams/vis/visualisationClass.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"\u0027https://plantuml.com/class-diagram","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"skinparam classFontColor automatic","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"class \"{abstract}\\nCommand\" #MintCream {","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"+execute() {abstract}","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"class VisCommand #MistyRose {","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"-String type","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"-String chart","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"+execute()","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"class RawCommand #Cornsilk {","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"-args: List\u003cString\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"-extraArgs: Map\u003cString, String\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"#commandName: String","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"class Categorizer #HoneyDew {","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":"+\u003cu\u003esortType(cashflowList: CashflowList, type: String)","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":"+\u003cu\u003esortExpenses(cashflowList: CashflowList)","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":"+\u003cu\u003esortIncome(cashflowList: CashflowList)","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":"class Visualizer #Beige {","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":"+\u003cu\u003edisplayChart(chart: String, cashFlowByCat: Map, type: String)","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":"+ \u003cu\u003edisplayPieChart(cashFlowByCat: Map, type: String)","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":"+ \u003cu\u003edisplayBarChart(cashFlowByCat: Map, type: String)","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"\"{abstract}\\nCommand\" \u003c|-- VisCommand","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"RawCommand \u003c.. VisCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":"Categorizer \u003c.. Visualizer","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":"Visualizer \u003c.. VisCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"hide Circle","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":"skinparam classAttributeIconSize 0","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"wwweert123":43}},{"path":"docs/diagrams/vis/visualisationSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"participant \":VisCommand\"","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nUi\"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nCashFlowList\"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nCategorizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nVisualizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nUi\": getInstance()","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nCashFlowList\": getInstance()","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nUi\": printDisplayChart(type)","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"ref over \"\u003c\u003cclass\u003e\u003e\\nCategorizer\", \":VisCommand\" : sort cashflow entries","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"ref over \"\u003c\u003cclass\u003e\u003e\\nVisualizer\", \":VisCommand\": displaying chart","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"hide footbox","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"wwweert123":21}},{"path":"docs/diagrams/vis/visualizerSequence.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"mainframe sd displaying chart","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"participant \":VisCommand\"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"participant \"\u003c\u003cclass\u003e\u003e\\nVisualizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"\":VisCommand\"-\u003e \"\u003c\u003cclass\u003e\u003e\\nVisualizer\": Visualizer.displayChart(chart, sortedCashFlow, type)","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"activate \"\u003c\u003cclass\u003e\u003e\\nVisualizer\"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"alt chartType \u003d\u003d \"pie\"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nVisualizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nVisualizer\": displayPieChart(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"else chartType \u003d\u003d \"bar\"","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" \"\u003c\u003cclass\u003e\u003e\\nVisualizer\" -\u003e \"\u003c\u003cclass\u003e\u003e\\nVisualizer\": displayBarChart(cashflowList)","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"end","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"hide footbox","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"wwweert123":20}},{"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":"ryan1604"},"content":"import seedu.financialplanner.commands.Command;","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.storage.Storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-07"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlanner {","lastModifiedDate":"2023-10-07"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" private static final String FILE_PATH \u003d \"data/data.txt\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private final Storage storage \u003d Storage.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private final WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" ","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" private FinancialPlanner() {","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" FinancialPlannerLogger.initialise();","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" new FinancialPlanner().run();","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" public void run() {","lastModifiedDate":"2023-10-07"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" storage.load(FILE_PATH);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" String input;","lastModifiedDate":"2023-10-07"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" Command command \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" input \u003d ui.input();","lastModifiedDate":"2023-10-07"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" command.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" save();","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" ui.exitMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" public void save() {","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" storage.save(FILE_PATH);","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","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-07"}],"authorContributionMap":{"NeoMinWei":1,"ryan1604":40,"YFshadaow":16}},{"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/cashflow/Budget.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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-23"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" public static void deleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" public static void resetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d initialBudget;","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" public static void setInitialBudget(double amount) {","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d amount;","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" public static void updateCurrentBudget(double amount) {","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" currentBudget +\u003d amount;","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":1,"ryan1604":81}},{"path":"src/main/java/seedu/financialplanner/cashflow/Cashflow.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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":" protected String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" public Cashflow(double amount, int recur, String description) {","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" this.recur \u003d recur;","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" public static void clearBalance() {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" balance \u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" public static void setBalance(double amount) {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" balance \u003d amount;","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg-reused","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" //Reused from https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" public static double round(double value, int places) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" if (places \u003c 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" BigDecimal bd \u003d BigDecimal.valueOf(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" bd \u003d bd.setScale(places, RoundingMode.HALF_UP);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" return bd.doubleValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" //@author Nick Bolton-reused","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" //Reused from","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"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":50,"author":{"gitId":"NeoMinWei"},"content":" public String capitalize(String line) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" return Character.toUpperCase(line.charAt(0)) + line.substring(1);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" //@author Nick Bolton","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" String string \u003d \" Amount: \" + decimalFormat.format(round(amount, 2));","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" if (recur !\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d System.lineSeparator() + \" Recurring every: \" + recur + \" days\";","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" if (description !\u003d null) {","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d System.lineSeparator() + \" Description: \" + description;","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" return string;","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":" public String formatBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" return decimalFormat.format(round(Cashflow.balance, 2));","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" public double getAmount() {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" return this.amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" public static double getBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" return balance;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" String string \u003d \" | \" + this.recur;","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" if (description !\u003d null) {","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d \" | \" + this.description;","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" return string;","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" public abstract ExpenseType getExpenseType();","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" public abstract IncomeType getIncomeType();","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":2,"NeoMinWei":78,"ryan1604":16}},{"path":"src/main/java/seedu/financialplanner/cashflow/CashflowList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"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, description);","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"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, description);","lastModifiedDate":"2023-10-28"},{"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 double deleteCashflowWithoutCategory(int index) {","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":" return toRemove.getAmount();","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" //helper method to find the index of a given cashflow in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" //given its index in its respective list. e.g. \"income 3\" is the third income","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" //in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" private int cashflowIndexFinder(CashflowCategory category, int cashflowIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" switch (category) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromIncomeIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromExpenseIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" return -1;","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":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" private int findCashflowIndexFromIncomeIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"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":" private int findCashflowIndexFromExpenseIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" public double deleteCashflowWithCategory(CashflowCategory category, int index) {","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":" int listIndex \u003d cashflowIndexFinder(category, index);","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" Cashflow toRemove \u003d list.get(listIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" list.remove(listIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" toRemove.deleteCashflowvalue();","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" ui.printDeletedCashflow(toRemove);","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize - 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" return toRemove.getAmount();","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" public void load(Cashflow entry) {","lastModifiedDate":"2023-10-10"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" list.add(entry);","lastModifiedDate":"2023-10-10"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" //temp method","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" public String getList() {","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-12"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" output.append(entry).append(\"\\n\");","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" return output.toString();","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":119,"YFshadaow":3,"ryan1604":16}},{"path":"src/main/java/seedu/financialplanner/cashflow/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" super(amount, recur, description);","lastModifiedDate":"2023-10-28"},{"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/cashflow/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, String description) {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" super(amount, recur, description);","lastModifiedDate":"2023-10-28"},{"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":"","lastModifiedDate":"2023-10-23"},{"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 \"I | \" + 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/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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"public class AddCashflowCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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 String description \u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" public AddCashflowCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" String categoryString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(categoryString.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"a\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have an amount\");","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing amount as double\");","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" amount \u003d Double.parseDouble(rawCommand.extraArgs.get(\"a\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" if (amount \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Amount cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"a\");","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"t\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have a type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" String stringType \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" if (category.equals(CashflowCategory.EXPENSE)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing ExpenseType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" expenseType \u003d ExpenseType.valueOf(stringType.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for ExpenseType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be one of the following: \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" \"dining, entertainment, shopping, travel, insurance, necessities, others\");","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" } else if (category.equals(CashflowCategory.INCOME)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing IncomeType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" incomeType \u003d IncomeType.valueOf(stringType.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for IncomeType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be one of the following: \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" \"salary, investments, allowance, others\");","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"YFshadaow"},"content":" if (rawCommand.extraArgs.containsKey(\"r\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing recur as integer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"YFshadaow"},"content":" recur \u003d Integer.parseInt(rawCommand.extraArgs.get(\"r\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Recurrence must be an integer\");","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"r\");","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" if (recur \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Recurring value cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" if (rawCommand.extraArgs.containsKey(\"d\")) {","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Getting description of cashflow\");","lastModifiedDate":"2023-10-28"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" String line \u003d rawCommand.extraArgs.get(\"d\");","lastModifiedDate":"2023-10-28"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" if (line.isBlank()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Empty description\");","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Description cannot be left empty\");","lastModifiedDate":"2023-10-28"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" description \u003d line.trim();","lastModifiedDate":"2023-10-28"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" rawCommand.extraArgs.remove(\"d\");","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":106,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":114,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" assert recur \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" assert amount \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" if (category.equals(CashflowCategory.EXPENSE)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" assert expenseType.equals(ExpenseType.DINING) || expenseType.equals(ExpenseType.ENTERTAINMENT)","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.SHOPPING) || expenseType.equals(ExpenseType.TRAVEL)","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.INSURANCE) || expenseType.equals(ExpenseType.OTHERS)","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.NECESSITIES);","lastModifiedDate":"2023-10-23"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" } else if (category.equals(CashflowCategory.INCOME)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":" assert incomeType.equals(IncomeType.SALARY) || incomeType.equals(IncomeType.INVESTMENTS)","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":" || incomeType.equals(IncomeType.ALLOWANCE) || incomeType.equals(IncomeType.OTHERS);","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"YFshadaow"},"content":" switch (category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addIncome(amount, incomeType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":132,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-08"},{"lineNumber":133,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addExpense(amount, expenseType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"NeoMinWei"},"content":" deductFromBudget(cashflowList.list.get(cashflowList.list.size() - 1));","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":139,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":143,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":" private static void deductFromBudget(Cashflow entry) {","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"NeoMinWei"},"content":" double expenseAmount \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":" Budget.deduct(expenseAmount);","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"NeoMinWei"},"content":" ui.printBudgetAfterDeduction();","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":1,"NeoMinWei":103,"ryan1604":9,"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":"ryan1604"},"content":"public class AddReminderCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":30,"ryan1604":1}},{"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":"ryan1604"},"content":"public class AddStockCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"wwweert123"},"content":" stockCode \u003d rawCommand.extraArgs.get(\"s\").toUpperCase();","lastModifiedDate":"2023-10-22"},{"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":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"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.WARNING, \"Error adding stock to watchlist\");","lastModifiedDate":"2023-10-23"},{"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":31,"NeoMinWei":2,"YFshadaow":13,"ryan1604":1}},{"path":"src/main/java/seedu/financialplanner/commands/BalanceCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"public class BalanceCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" public BalanceCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Balance: \" + getBalanceString());","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" private String getBalanceString() {","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(Cashflow.getBalance(), 2));","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"NeoMinWei":1,"ryan1604":27}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"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 Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private double budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" private String command;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" public BudgetCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" command \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"delete\") || command.equals(\"reset\") || command.equals(\"view\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" validateCommandFormat(rawCommand);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" validateBudget(rawCommand);","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"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-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" \"or equal to total balance\";","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" rawCommand.extraArgs.remove(\"b\");","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" private void validateBudget(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Parsing budget as double\");","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" budget \u003d Double.parseDouble(rawCommand.extraArgs.get(\"b\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Budget must be a number.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" if (budget \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be greater than 0.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" if (budget \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be lower than total balance.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" private void validateCommandFormat(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" if (!command.equals(\"set\") \u0026\u0026 !command.equals(\"update\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid arguments for budget command\");","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget command must be one of the following: set, update, \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" \"delete, reset, view.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"set\") \u0026\u0026 Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to set existing budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is an existing budget, did you mean update?\");","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" } else if (command.equals(\"update\") \u0026\u0026 !Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to update non-existent budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is no budget set yet, did you mean set?\");","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.containsKey(\"b\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Missing argument /b in command\");","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Missing /b argument.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" assert command.equals(\"set\") || command.equals(\"update\") || command.equals(\"delete\") ||","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" command.equals(\"reset\") || command.equals(\"view\");","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" switch (command) {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" case \"set\":","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" setBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" case \"update\":","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" updateBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" case \"delete\":","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" case \"reset\":","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" resetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" case \"view\":","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" viewBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Unknown command.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" private void viewBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" ui.printBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"view\");","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" private void resetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":" if (Budget.getInitialBudget() !\u003d Budget.getCurrentBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" if (Budget.getInitialBudget() \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" Budget.setInitialBudget(Cashflow.getBalance());","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetExceedBalance();","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":" Budget.resetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":" ui.printResetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" } else if (!Budget.hasBudget()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"delete\");","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"reset\");","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" private void deleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" ui.printDeleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetError(\"delete\");","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" private void updateBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Updating budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetBeforeUpdate();","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(budget);","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"ryan1604"},"content":" ui.printBudgetAfterUpdate();","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"ryan1604"},"content":" private void setBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Setting budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(budget);","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":" ui.printSetBudget();","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":145}},{"path":"src/main/java/seedu/financialplanner/commands/Command.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":"ryan1604"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-23"},{"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":4,"ryan1604":1}},{"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.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"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-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public class DeleteCashflowCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"YFshadaow"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"YFshadaow"},"content":" handleDeleteCashflowWithoutCategory();","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" assert index !\u003d 0;","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-23"},{"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.getInstance().showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-23"},{"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":" double amount \u003d cashflowList.deleteCashflowWithoutCategory(index);","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" Budget.updateCurrentBudget(amount);","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" }","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":" private void handleDeleteCashflowWithCategory() {","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Deleting cashflow with category\");","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" double amount \u003d cashflowList.deleteCashflowWithCategory(category, index);","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" Budget.updateCurrentBudget(amount);","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"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":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":83,"ryan1604":7,"YFshadaow":12}},{"path":"src/main/java/seedu/financialplanner/commands/DeleteStockCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public class DeleteStockCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" private final String stockCode;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" public DeleteStockCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.containsKey(\"s\")) {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(\"Stock code cannot be empty\");","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Parsing stockcode from input\");","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" stockCode \u003d rawCommand.extraArgs.get(\"s\").toUpperCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" rawCommand.extraArgs.remove(\"s\");","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" String stockName;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"deleting stock from watchlist\");","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" stockName \u003d watchList.deleteStock(stockCode);","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" assert stockName !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" ui.printDeleteStock(stockName);","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Error deleting stock from watchlist\");","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"wwweert123":46,"ryan1604":1}},{"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":"ryan1604"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":15,"ryan1604":1}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"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":{"wwweert123":1,"NeoMinWei":3,"hshiah":43,"ryan1604":2,"YFshadaow":7}},{"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":"ryan1604"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":11,"ryan1604":1}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":" ui.showMessage((i + 1) + \": \" + cashflowToBePrinted.get(i));","lastModifiedDate":"2023-10-23"},{"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":8,"YFshadaow":59,"ryan1604":2}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.reminder.Reminder;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.reminder.ReminderList;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public class OverviewCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" private static final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" public OverviewCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","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":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" String balance \u003d getBalance();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" String highestIncome \u003d getHighestIncome();","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" String highestExpense \u003d getHighestExpense();","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" String budget \u003d getBudgetDesc();","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" String reminders \u003d getReminders();","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" Ui.getInstance().printOverview(balance, highestIncome, highestExpense, budget, reminders);","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" //todo: goal disparity","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" private String getBudgetDesc() {","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" return Budget.getCurrentBudgetString();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" private String getHighestIncome() {","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" double maxIncome \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" String incomeType \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Income \u0026\u0026 entry.getAmount() \u003e maxIncome) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" maxIncome \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" incomeType \u003d entry.capitalize(entry.getIncomeType().","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" toString().toLowerCase()); // Capitalise the first letter","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" if (incomeType.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" return \"No income added yet.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxIncome) + \" Category: \" + incomeType;","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" private String getHighestExpense() {","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" double maxExpense \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" String expenseType \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Expense \u0026\u0026 entry.getAmount() \u003e maxExpense) {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" maxExpense \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" expenseType \u003d entry.capitalize(entry.getExpenseType().","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" toString().toLowerCase()); // Capitalise the first letter","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" if (expenseType.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" return \"No expense added yet.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxExpense) + \" Category: \" + expenseType;","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" private String formatDoubleToString(double amount) {","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(amount, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" private String getReminders() {","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" ReminderList reminderList \u003d ReminderList.INSTANCE;","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" if (reminderList.list.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" return \"No reminders added yet.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" StringBuilder reminders \u003d new StringBuilder();","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" int count \u003d 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" for (Reminder reminder : reminderList.list) {","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" reminders.append(count).append(\". \").append(reminder.toString()).append(\"\\n\");","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" count++;","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" return reminders.toString();","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" private String getBalance() {","lastModifiedDate":"2023-10-28"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(Cashflow.getBalance());","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":5,"ryan1604":97}},{"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":"ryan1604"},"content":"public class SetGoalCommand extends Command {","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" String labelString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"g\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Goal must have an amount\");","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" try{","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" amount \u003d Integer.parseInt(rawCommand.extraArgs.get(\"g\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" } catch (IllegalArgumentException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"g\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"l\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Please specify the content of the goal\");","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" goal \u003d rawCommand.extraArgs.get(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" String unknownExtraArgument \u003d new java.util.ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","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":"","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"hshiah"},"content":" GoalList.INSTANCE.list.add(new Goal(goal, amount));","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" Ui.getInstance().showMessage(\"Set Goal Successfully!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":1,"hshiah":34,"ryan1604":2}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Categorizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Visualizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"public class VisCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" private String type;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" private String chart;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-17"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" public void execute() throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" assert !chart.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" assert !type.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" ui.printDisplayChart(type, chart);","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" Visualizer.displayChart(chart, Categorizer.sortType(CashflowList.getInstance(), type), type);","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":45,"NeoMinWei":1,"ryan1604":2}},{"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 seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-22"},{"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":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"public class WatchListCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" ui.printWatchListHeader();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" watchList.getLatestWatchlistInfo();","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Printing watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" ui.printStocksInfo(watchList);","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"wwweert123":24,"NeoMinWei":3,"YFshadaow":8,"ryan1604":3}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" public Goal(String label, int amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.label \u003d label;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" return \"Goal: \" + this.label + \" | \" + this.amount + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" //TODO edit the expense to mark the goal as done","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" //TODO delete the Reminder","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" return this.label + \" | \" + this.amount + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":24,"ryan1604":4}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" public void load(Goal goal) {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" list.add(goal);","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" //TODO deleteGoal","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13,"ryan1604":1}},{"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.io.Serializable;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"public class Stock implements Serializable {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private static final String API_ENDPOINT \u003d \"https://www.alphavantage.co/query?function\u003dSYMBOL_SEARCH\u0026keywords\u003d\";","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private static final String API_KEY \u003d \"LNKL0548PHY2F0QU\";","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" private String symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" private String exchange;","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" private String stockName;","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" private String price;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" private String dayHigh;","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" private String dayLow;","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" private Date lastUpdated \u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" private long lastFetched \u003d 0;","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" public Stock(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" this.stockName \u003d getStockNameFromAPI(symbol);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" public String getStockName() {","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" return stockName;","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" public String getStockNameFromAPI(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s\u0026apikey\u003d%s\", API_ENDPOINT,symbol,API_KEY);","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API for stock info\");","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" Object obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" JSONObject jsonObject \u003d (JSONObject) obj;","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" JSONArray ja \u003d (JSONArray) jsonObject.get(\"bestMatches\");","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" if (ja \u003d\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"API limit Reached\");","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" if (ja.isEmpty()) {","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) ja.get(0);","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" String symbolFound \u003d (String) stock.get(\"1. symbol\");","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" // TODO: Separate based on market","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" // TODO: testing","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" if (!symbolFound.equals(symbol)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" assert stock.get(\"2. name\") !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" return (String) stock.get(\"2. name\");","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":" public String getSymbol() {","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" return symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":" public void setSymbol(String symbol) {","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":" public String toString() {","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":" return symbol + \",\";","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":" public String getPrice() {","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":" return price;","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":" public void setPrice(String price) {","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":" this.price \u003d price;","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"wwweert123"},"content":" public String getExchange() {","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"wwweert123"},"content":" return exchange;","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"wwweert123"},"content":" public void setExchange(String exchange) {","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"wwweert123"},"content":" this.exchange \u003d exchange;","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"wwweert123"},"content":" public String getDayHigh() {","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"wwweert123"},"content":" return dayHigh;","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"wwweert123"},"content":" public void setDayHigh(String dayHigh) {","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"wwweert123"},"content":" this.dayHigh \u003d dayHigh;","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"wwweert123"},"content":" public String getDayLow() {","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"wwweert123"},"content":" return dayLow;","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"wwweert123"},"content":" public void setDayLow(String dayLow) {","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"wwweert123"},"content":" this.dayLow \u003d dayLow;","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"wwweert123"},"content":" public Date getLastUpdated() {","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"wwweert123"},"content":" return lastUpdated;","lastModifiedDate":"2023-10-29"},{"lineNumber":130,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":131,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":132,"author":{"gitId":"wwweert123"},"content":" public void setLastUpdated(Date lastUpdated) {","lastModifiedDate":"2023-10-29"},{"lineNumber":133,"author":{"gitId":"wwweert123"},"content":" this.lastUpdated \u003d lastUpdated;","lastModifiedDate":"2023-10-29"},{"lineNumber":134,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":135,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":136,"author":{"gitId":"wwweert123"},"content":" public long getLastFetched() {","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"wwweert123"},"content":" return lastFetched;","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"wwweert123"},"content":" public void setLastFetched(long lastFetched) {","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"wwweert123"},"content":" this.lastFetched \u003d lastFetched;","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":143,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":142,"ryan1604":1}},{"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.JSONObject;","lastModifiedDate":"2023-10-22"},{"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-09"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.storage.LoadData;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"public class WatchList {","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private static WatchList watchlist \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" private static final String API_ENDPOINT \u003d \"https://financialmodelingprep.com/api/v3/quote/\";","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" private static final String API_KEY \u003d \"iFumtYryBCbHpS3sDqLdVKi2SdP63vSV\";","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" private HashMap\u003cString, Stock\u003e stocks \u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" private WatchList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" stocks \u003d LoadData.loadWatchList();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" if (!stocks.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" return;","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Initializing New watchlist.. adding AAPL and GOOGL for your reference\");","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" Stock apple \u003d new Stock(\"AAPL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" assert apple.getSymbol() !\u003d null \u0026\u0026 apple.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" stocks.put(apple.getSymbol(), apple);","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" Stock google \u003d new Stock(\"GOOGL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" assert google.getSymbol() !\u003d null \u0026\u0026 google.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" stocks.put(google.getSymbol(), google);","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" public static WatchList getInstance() {","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" if (watchlist \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" watchlist \u003d new WatchList();","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" return watchlist;","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" public void getLatestWatchlistInfo() throws FinancialPlannerException {","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" StringBuilder queryStocks \u003d getExpiredStocks();","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" fetchFMPStockPrices(queryStocks);","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" public StringBuilder getExpiredStocks() {","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" StringBuilder queryStocks \u003d new StringBuilder();","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" long currentTime \u003d System.currentTimeMillis();","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" long fivemin \u003d 300000;","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" for (Map.Entry\u003cString, Stock\u003e set: stocks.entrySet()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" if (set.getValue().getLastFetched() + fivemin \u003c currentTime) {","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" queryStocks.append(set.getKey());","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" queryStocks.append(\",\");","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" return queryStocks;","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" public void fetchFMPStockPrices(StringBuilder queryStocks) throws FinancialPlannerException {","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" if (stocks.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Empty Watchlist. Nothing to display...\");","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" if (queryStocks.toString().isEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" // all stocks prices are up-to-date, just display","lastModifiedDate":"2023-10-29"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" return;","lastModifiedDate":"2023-10-29"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s?apikey\u003d%s\", API_ENDPOINT, queryStocks, API_KEY);","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" Object obj;","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API endpoint FMP\");","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":" // System.out.println(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":96,"author":{"gitId":"wwweert123"},"content":" obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-09"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Cant request API endpoint\");","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Interrupted\");","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Could not parse to JSON\");","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":" extractWatchlistInfoFromJSONArray((JSONArray) obj);","lastModifiedDate":"2023-10-29"},{"lineNumber":108,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":109,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":110,"author":{"gitId":"wwweert123"},"content":" public void extractWatchlistInfoFromJSONArray(JSONArray jsonstocks) throws FinancialPlannerException {","lastModifiedDate":"2023-10-29"},{"lineNumber":111,"author":{"gitId":"wwweert123"},"content":" if (jsonstocks.isEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":112,"author":{"gitId":"wwweert123"},"content":" return;","lastModifiedDate":"2023-10-29"},{"lineNumber":113,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"wwweert123"},"content":" long fetchTime \u003d System.currentTimeMillis();","lastModifiedDate":"2023-10-29"},{"lineNumber":115,"author":{"gitId":"wwweert123"},"content":" for (Object jo : jsonstocks) {","lastModifiedDate":"2023-10-29"},{"lineNumber":116,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) jo;","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"wwweert123"},"content":" if (stocks.containsKey(stock.get(\"symbol\").toString().toUpperCase())) {","lastModifiedDate":"2023-10-29"},{"lineNumber":118,"author":{"gitId":"wwweert123"},"content":" Stock stockLocal \u003d stocks.get(stock.get(\"symbol\").toString().toUpperCase());","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"wwweert123"},"content":" extractStockInfoFromJSONObject(stock, stockLocal, fetchTime);","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":121,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":123,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":124,"author":{"gitId":"wwweert123"},"content":" public void extractStockInfoFromJSONObject(JSONObject stock, Stock stockLocal, long fetchTime) {","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"wwweert123"},"content":" stockLocal.setLastFetched(fetchTime);","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"wwweert123"},"content":" String price \u003d stock.get(\"price\").toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"wwweert123"},"content":" assert price !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"wwweert123"},"content":" stockLocal.setPrice(price);","lastModifiedDate":"2023-10-29"},{"lineNumber":130,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":131,"author":{"gitId":"wwweert123"},"content":" String exchange \u003d stock.get(\"exchange\").toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":132,"author":{"gitId":"wwweert123"},"content":" assert exchange !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":133,"author":{"gitId":"wwweert123"},"content":" stockLocal.setExchange(exchange);","lastModifiedDate":"2023-10-29"},{"lineNumber":134,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":135,"author":{"gitId":"wwweert123"},"content":" String dayHigh \u003d stock.get(\"dayHigh\").toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":136,"author":{"gitId":"wwweert123"},"content":" assert dayHigh !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"wwweert123"},"content":" stockLocal.setDayHigh(dayHigh);","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"wwweert123"},"content":" String dayLow \u003d stock.get(\"dayLow\").toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"wwweert123"},"content":" assert dayLow !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"wwweert123"},"content":" stockLocal.setDayLow(dayLow);","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":143,"author":{"gitId":"wwweert123"},"content":" String timestamp \u003d stock.get(\"timestamp\").toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":144,"author":{"gitId":"wwweert123"},"content":" long lastUpdated \u003d Long.parseLong(timestamp) * 1000;","lastModifiedDate":"2023-10-29"},{"lineNumber":145,"author":{"gitId":"wwweert123"},"content":" stockLocal.setLastUpdated(new Date(lastUpdated));","lastModifiedDate":"2023-10-29"},{"lineNumber":146,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":147,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":148,"author":{"gitId":"wwweert123"},"content":" public String addStock(String stockCode) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":149,"author":{"gitId":"wwweert123"},"content":" if (stocks.size() \u003e\u003d 5) {","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Watchlist is full (max 5). Delete a stock to add a new one\");","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"wwweert123"},"content":" if (stocks.containsKey(stockCode.toUpperCase())) { // should already be uppercase","lastModifiedDate":"2023-10-29"},{"lineNumber":153,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock is already present in Watchlist. Use watchlist to view it!\");","lastModifiedDate":"2023-10-26"},{"lineNumber":154,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":155,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":156,"author":{"gitId":"wwweert123"},"content":" Stock newStock;","lastModifiedDate":"2023-10-29"},{"lineNumber":157,"author":{"gitId":"wwweert123"},"content":" newStock \u003d new Stock(stockCode);","lastModifiedDate":"2023-10-13"},{"lineNumber":158,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"wwweert123"},"content":" assert newStock.getSymbol() !\u003d null \u0026\u0026 newStock.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"wwweert123"},"content":" stocks.put(newStock.getSymbol(), newStock);","lastModifiedDate":"2023-10-29"},{"lineNumber":161,"author":{"gitId":"wwweert123"},"content":" return newStock.getStockName();","lastModifiedDate":"2023-10-09"},{"lineNumber":162,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":163,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":164,"author":{"gitId":"wwweert123"},"content":" public String deleteStock(String stockCode) throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"wwweert123"},"content":" if (stocks.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"No stock in watchlist!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"wwweert123"},"content":" Stock removedStock \u003d stocks.remove(stockCode.toUpperCase()); // should be uppercase already","lastModifiedDate":"2023-10-29"},{"lineNumber":169,"author":{"gitId":"wwweert123"},"content":" if (removedStock \u003d\u003d null) {","lastModifiedDate":"2023-10-29"},{"lineNumber":170,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Does not Exist in Watchlist\");","lastModifiedDate":"2023-10-29"},{"lineNumber":171,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":172,"author":{"gitId":"wwweert123"},"content":" return removedStock.getStockName();","lastModifiedDate":"2023-10-29"},{"lineNumber":173,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":175,"author":{"gitId":"hshiah"},"content":" public int size() {","lastModifiedDate":"2023-10-12"},{"lineNumber":176,"author":{"gitId":"hshiah"},"content":" return stocks.size();","lastModifiedDate":"2023-10-12"},{"lineNumber":177,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":178,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":179,"author":{"gitId":"hshiah"},"content":" public Stock get(int index) {","lastModifiedDate":"2023-10-12"},{"lineNumber":180,"author":{"gitId":"hshiah"},"content":" return stocks.get(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":181,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":182,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"wwweert123"},"content":" public HashMap\u003cString, Stock\u003e getStocks() {","lastModifiedDate":"2023-10-29"},{"lineNumber":184,"author":{"gitId":"wwweert123"},"content":" return stocks;","lastModifiedDate":"2023-10-22"},{"lineNumber":185,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"wwweert123"},"content":" public void setStocks(HashMap\u003cString, Stock\u003e stocks) {","lastModifiedDate":"2023-10-29"},{"lineNumber":188,"author":{"gitId":"wwweert123"},"content":" this.stocks \u003d stocks;","lastModifiedDate":"2023-10-23"},{"lineNumber":189,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":190,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":181,"YFshadaow":1,"hshiah":8}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" public Reminder(String type, String date) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" return \"Reminder: \" + this.type + \" | \" + this.date + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" /*","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" * Returns a string that can be saved to a file.","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" * Format: type | date | isDone","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" * Example: \"Reminder: Birthday | 2020-10-10 | false\"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" return this.type + \" | \" + this.date + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":29,"ryan1604":2}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":"public class ReminderList {","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" public static final ReminderList INSTANCE \u003d new ReminderList();","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" public ArrayList\u003cReminder\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private ReminderList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" public void load(Reminder reminder) {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" list.add(reminder);","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" //TODO deleteReminder","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13,"ryan1604":1}},{"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":"wwweert123"},"content":"import seedu.financialplanner.investments.Stock;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.io.StreamCorruptedException;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"public abstract class LoadData {","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private static final String FILE_PATH \u003d \"data/watchlist.txt\";","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" private static final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" private static final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" public static void load(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" Scanner inputFile \u003d new Scanner(new FileReader(filePath));","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" String line;","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Loading existing file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" while(inputFile.hasNext()) {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" line \u003d inputFile.nextLine();","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" String[] split \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" String type \u003d split[0].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" final Cashflow entry \u003d getEntry(type, split);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" cashflowList.load(entry);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" case \"B\":","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" loadBudget(split);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","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":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" inputFile.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"File not found. Creating new file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException | FinancialPlannerException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" String message \u003d e.getMessage();","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" handleCorruptedFile(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" private static void handleCorruptedFile(String message) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"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":62,"author":{"gitId":"ryan1604"},"content":" if (createNewFile()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" Cashflow.clearBalance();","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Please fix the corrupted file, \" +","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" \"which can be found in data/data.txt.\\nError message: \" + message);","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","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":" private static void loadBudget(String[] split) throws IllegalArgumentException {","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" double initial \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" double current \u003d Double.parseDouble(split[2].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" if (initial \u003d\u003d 0 \u0026\u0026 current \u003d\u003d 0) {","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" if (initial \u003c 0 || current \u003c 0) {","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Negative values for budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" if (initial \u003e Cashflow.getBalance() || current \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Budget exceeds balance\");","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" if (initial \u003c current) {","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Current budget exceeds initial budget\");","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" Budget.load(initial, current);","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":" private static boolean createNewFile() {","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" String line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" while (!line.equalsIgnoreCase(\"y\") \u0026\u0026 !line.equalsIgnoreCase(\"n\")) {","lastModifiedDate":"2023-10-10"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Unknown input. Please enter Y or N only.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" return line.equalsIgnoreCase(\"y\");","lastModifiedDate":"2023-10-10"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" private static Cashflow getEntry(String type, String[] split)","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" throws FinancialPlannerException, IllegalArgumentException {","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" double value;","lastModifiedDate":"2023-10-10"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" int recur;","lastModifiedDate":"2023-10-10"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" Cashflow entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-10"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-10"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" description \u003d getDescription(split);","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" checkValidInput(value, recur);","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":" IncomeType incomeType;","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" incomeType \u003d IncomeType.valueOf(split[2].trim().toUpperCase());","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Invalid income type\");","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" entry \u003d new Income(value, incomeType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-10"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" description \u003d getDescription(split);","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" checkValidInput(value, recur);","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":" ExpenseType expenseType;","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" expenseType \u003d ExpenseType.valueOf(split[2].trim().toUpperCase());","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Invalid expense type\");","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":" entry \u003d new Expense(value, expenseType, recur, description);","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-10"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","lastModifiedDate":"2023-10-10"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" return entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":139,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"NeoMinWei"},"content":" private static String getDescription(String[] split) {","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"NeoMinWei"},"content":" String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"NeoMinWei"},"content":" if (split.length \u003e 4) {","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"NeoMinWei"},"content":" description \u003d split[4].trim();","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"NeoMinWei"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"NeoMinWei"},"content":" description \u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"NeoMinWei"},"content":" return description;","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"wwweert123"},"content":" public static HashMap\u003cString, Stock\u003e loadWatchList() {","lastModifiedDate":"2023-10-29"},{"lineNumber":151,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":152,"author":{"gitId":"wwweert123"},"content":" HashMap\u003cString, Stock\u003e stocksData \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-29"},{"lineNumber":153,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":154,"author":{"gitId":"wwweert123"},"content":" ObjectInputStream watchListStocksInputStream","lastModifiedDate":"2023-10-23"},{"lineNumber":155,"author":{"gitId":"wwweert123"},"content":" \u003d new ObjectInputStream(","lastModifiedDate":"2023-10-23"},{"lineNumber":156,"author":{"gitId":"wwweert123"},"content":" new FileInputStream(FILE_PATH)","lastModifiedDate":"2023-10-23"},{"lineNumber":157,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-23"},{"lineNumber":158,"author":{"gitId":"wwweert123"},"content":" stocksData \u003d (HashMap\u003cString, Stock\u003e) watchListStocksInputStream.readObject();","lastModifiedDate":"2023-10-29"},{"lineNumber":159,"author":{"gitId":"wwweert123"},"content":" watchListStocksInputStream.close();","lastModifiedDate":"2023-10-23"},{"lineNumber":160,"author":{"gitId":"wwweert123"},"content":" } catch (StreamCorruptedException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":161,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"Watchlist file corrupted.. Rebuilding\");","lastModifiedDate":"2023-10-23"},{"lineNumber":162,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"Watchlist file not found... Creating\");","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"wwweert123"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"FIle appears to be corrupted...\");","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":167,"author":{"gitId":"wwweert123"},"content":" return stocksData;","lastModifiedDate":"2023-10-23"},{"lineNumber":168,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":" private static void checkValidInput(double value, int recur) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"ryan1604"},"content":" if (value \u003c 0 || recur \u003c 0) {","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Amount and number of days cannot be negative\");","lastModifiedDate":"2023-10-23"},{"lineNumber":173,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":174,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":175,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"wwweert123":27,"NeoMinWei":31,"ryan1604":115,"YFshadaow":2}},{"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":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public abstract class SaveData {","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" private static final String FILE_PATH \u003d \"data/watchlist.txt\";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" private static final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" public static void save(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" fw.write(entry.formatString() + \"\\n\");","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" fw.write(Budget.formatString() + \"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" fw.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error saving file.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" public static void saveWatchList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" ObjectOutputStream watchListStocksOutput","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" \u003d new ObjectOutputStream(new FileOutputStream(FILE_PATH));","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" watchListStocksOutput.writeObject(wl.getStocks());","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" watchListStocksOutput.close();","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" ui.showMessage(\"Unable to save watchlist to file\");","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"wwweert123":21,"NeoMinWei":3,"ryan1604":22,"YFshadaow":1}},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"public class Storage {","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" private static Storage storage \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" private final Path path \u003d Paths.get(\"data\");","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" private Storage() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Directory doesn\u0027t exist. Creating directory...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Error creating directory: \" + e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" }","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"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" public static Storage getInstance() {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" if (storage \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" return storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" public void load(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" LoadData.load(filePath);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" public void save(String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" SaveData.save(filePath);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" SaveData.saveWatchList();","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"wwweert123":2,"ryan1604":37,"YFshadaow":2}},{"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":"ryan1604"},"content":"import seedu.financialplanner.commands.Command;","lastModifiedDate":"2023-10-23"},{"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.commands.BalanceCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.commands.DeleteStockCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"public class Parser {","lastModifiedDate":"2023-10-07"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" private static final String EXIT_COMMAND \u003d \"exit\";","lastModifiedDate":"2023-10-07"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" private static final String WATCHLIST_COMMAND \u003d \"watchlist\";","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" private static final String ADD_CASHFLOW_COMMAND \u003d \"add\";","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" private static final String DELETE_CASHFLOW_COMMAND \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" private static final String ADD_STOCK_COMMAND \u003d \"addstock\";","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" private static final String DELETE_STOCK_COMMAND \u003d \"deletestock\";","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":" private static final String FIND_COMMAND \u003d \"find\";","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" private static final String OVERVIEW_COMMAND \u003d \"overview\";","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" private static final String BUDGET_COMMAND \u003d \"budget\";","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" private static final String VISUALIZATION_COMMAND \u003d \"vis\";","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"hshiah"},"content":" private static final String ADD_REMINDER_COMMAND \u003d \"addreminder\";","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" private static final String LIST_COMMAND \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"hshiah"},"content":" private static final String SET_GOAL_COMMAND \u003d \"set\";","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" private static final String BALANCE_COMMAND \u003d \"balance\";","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" public static Command parseCommand(String input) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" RawCommand rawCommand \u003d parseRawCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" return parseCommand(rawCommand);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" public static Command parseCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" switch (rawCommand.getCommandName()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" case EXIT_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" return new ExitCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" case WATCHLIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" return new WatchListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" case ADD_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" return new AddCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" case DELETE_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" return new DeleteCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" case ADD_STOCK_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" return new AddStockCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" case DELETE_STOCK_COMMAND:","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" return new DeleteStockCommand(rawCommand);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" case FIND_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"YFshadaow"},"content":" return new FindCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" case BUDGET_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" return new BudgetCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" case VISUALIZATION_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" return new VisCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" case OVERVIEW_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" return new OverviewCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"hshiah"},"content":" case ADD_REMINDER_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"hshiah"},"content":" return new AddReminderCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"YFshadaow"},"content":" case LIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"YFshadaow"},"content":" return new ListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"hshiah"},"content":" case SET_GOAL_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"hshiah"},"content":" return new SetGoalCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" case BALANCE_COMMAND:","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" return new BalanceCommand(rawCommand);","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-07"},{"lineNumber":81,"author":{"gitId":"YFshadaow"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"YFshadaow"},"content":" public static RawCommand parseRawCommand(String input) throws IllegalArgumentException{","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" Iterator\u003cString\u003e iterator \u003d Arrays.stream(input.split(\" \")).iterator();","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" if (!iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Command cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":90,"author":{"gitId":"YFshadaow"},"content":" String commandName \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"YFshadaow"},"content":" Map\u003cString, String\u003e extraArgs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e extraArgumentContentBuffer \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"YFshadaow"},"content":" String currentExtraArgumentName \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"YFshadaow"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"YFshadaow"},"content":" String next \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"YFshadaow"},"content":" if (next.startsWith(\"/\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument when next extra argument is found","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"YFshadaow"},"content":" if (next.length() \u003d\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Extra argument name cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"YFshadaow"},"content":" currentExtraArgumentName \u003d next.substring(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"YFshadaow"},"content":" args.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument at the very end","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" return new RawCommand(commandName, args, extraArgs);","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" private static void savePreviousExtraArgument(Map\u003cString, String\u003e extraArgs","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":" , String currentExtraArgumentName, List\u003cString\u003e extraArgumentContentBuffer) {","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"YFshadaow"},"content":" if (extraArgs.containsKey(currentExtraArgumentName)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"YFshadaow"},"content":" String.format(\"Duplicate extra argument name: %s\", currentExtraArgumentName));","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"YFshadaow"},"content":" extraArgs.put(currentExtraArgumentName, String.join(\" \", extraArgumentContentBuffer));","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.clear();","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":14,"NeoMinWei":24,"ryan1604":29,"YFshadaow":60,"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 seedu.financialplanner.investments.Stock;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public class Ui {","lastModifiedDate":"2023-10-07"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" private static Ui ui \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" private static final String RED \u003d \"\\u001B[31m\";","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" private static final String GREEN \u003d \"\\u001B[32m\";","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" private static final String RESET \u003d \"\\u001B[0m\";","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private static final String YELLOW \u003d \"\\u001B[33m\";","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" private Scanner Scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" private Ui() {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" public static Ui getInstance() {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" if (ui \u003d\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" return ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" public static void printCorruptedFileError(String message) {","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" public Scanner getScanner() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" return Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" public void setScanner(Scanner scanner) {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" this.Scanner \u003d scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" assert !message.isEmpty();","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-07"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Welcome to your Financial Planner. Type something to get started.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" public void exitMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Exiting Financial Planner. Goodbye.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" public String input() {","lastModifiedDate":"2023-10-07"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" return Scanner.nextLine().trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" public void printWatchListHeader() {","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Symbol\");","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Market\");","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" System.out.print(YELLOW + \"Price\" + RESET);","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" System.out.print(GREEN + \"Daily High\" + RESET);","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" System.out.print(RED + \"Daily Low\" + RESET);","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"EquityName\");","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Last Updated\");","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-29"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" System.out.println();","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" public void printStocksInfo(WatchList watchList) {","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" for (Map.Entry\u003cString, Stock\u003e set : watchList.getStocks().entrySet()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" Stock stock \u003d set.getValue();","lastModifiedDate":"2023-10-29"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" String symbol \u003d StringUtils.rightPad(stock.getSymbol(), 10);","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" String market \u003d StringUtils.rightPad(stock.getExchange(), 10);","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":" String price \u003d YELLOW + StringUtils.rightPad(stock.getPrice(), 10) + RESET;","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":" String dayHigh \u003d GREEN + StringUtils.rightPad(stock.getDayHigh(), 15) + RESET;","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" String dayLow \u003d RED + StringUtils.rightPad(stock.getDayLow(), 14) + RESET;","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" String name \u003d StringUtils.rightPad(stock.getStockName(), 30);","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" String date \u003d new SimpleDateFormat(\"E, MMM dd yyyy HH:mm:ss\")","lastModifiedDate":"2023-10-29"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":" .format(stock.getLastUpdated());","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":" String lastUpdate \u003d StringUtils.rightPad(date, 10);","lastModifiedDate":"2023-10-29"},{"lineNumber":93,"author":{"gitId":"wwweert123"},"content":" System.out.println(symbol + market + price + dayHigh + dayLow + name + lastUpdate);","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":95,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":97,"author":{"gitId":"wwweert123"},"content":" public void printAddStock(String stockName) {","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"You have successfully added:\");","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"wwweert123"},"content":" System.out.println(stockName);","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Use Watchlist to view it!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":103,"author":{"gitId":"wwweert123"},"content":" public void printDeleteStock(String stockName) {","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"You have successfully deleted: \");","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"wwweert123"},"content":" System.out.println(stockName);","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Use watchlist command to view updated Watchlist\");","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" public void printAddedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have added an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"to the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" public void printDeletedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have removed an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"from the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" public void printBudgetBeforeUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been updated:\\nOld initial budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":" Budget.getInitialBudgetString() + \"\\nOld current budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" showMessage(\"New initial budget: \" + Budget.getInitialBudgetString() +","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" \"\\nNew current budget: \" + Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" showMessage(\"You have exceeded your budget, please update to a larger budget or \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" \"reset the current budget to initial budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterDeduction() {","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"ryan1604"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"ryan1604"},"content":" message.append(\"You have exceeded your current budget by: \");","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"ryan1604"},"content":" } else if (Budget.getCurrentBudget() \u003e 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"ryan1604"},"content":" message.append(\"Your remaining budget for the month is: \");","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"ryan1604"},"content":" message.append(Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"ryan1604"},"content":" showMessage(message.toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":149,"author":{"gitId":"ryan1604"},"content":" public void printBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":150,"author":{"gitId":"ryan1604"},"content":" showMessage(\"You have a remaining budget of \" + Budget.getCurrentBudgetString() + \".\");","lastModifiedDate":"2023-10-23"},{"lineNumber":151,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":152,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":153,"author":{"gitId":"ryan1604"},"content":" public void printDeleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":154,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been deleted.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":155,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":156,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":157,"author":{"gitId":"ryan1604"},"content":" public void printResetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":158,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been reset to \" + Budget.getInitialBudgetString() + \".\");","lastModifiedDate":"2023-10-23"},{"lineNumber":159,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":161,"author":{"gitId":"wwweert123"},"content":" public void printDisplayChart(String type, String chart) {","lastModifiedDate":"2023-10-24"},{"lineNumber":162,"author":{"gitId":"wwweert123"},"content":" showMessage(\"Displaying \" + chart + \"chart for \" + type);","lastModifiedDate":"2023-10-24"},{"lineNumber":163,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":164,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"ryan1604"},"content":" public void printOverview(String... args) {","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"ryan1604"},"content":" String balance \u003d args[0];","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"ryan1604"},"content":" String income \u003d args[1];","lastModifiedDate":"2023-10-25"},{"lineNumber":168,"author":{"gitId":"ryan1604"},"content":" String expense \u003d args[2];","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"ryan1604"},"content":" String budget \u003d args[3];","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"ryan1604"},"content":" String reminders \u003d args[4];","lastModifiedDate":"2023-10-25"},{"lineNumber":171,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":172,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Here is an overview of your financials:\\n\" + \"Total balance: \" + balance + \"\\n\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"ryan1604"},"content":" \"Highest income: \" + income + \"\\n\" + \"Highest expense: \" + expense + \"\\n\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":174,"author":{"gitId":"ryan1604"},"content":" \"Remaining budget for the month: \" + budget + \"\\n\\n\" + \"Reminders:\\n\" + reminders);","lastModifiedDate":"2023-10-25"},{"lineNumber":175,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":177,"author":{"gitId":"ryan1604"},"content":" public void printSetBudget() {","lastModifiedDate":"2023-10-25"},{"lineNumber":178,"author":{"gitId":"ryan1604"},"content":" showMessage(\"A monthly budget of \" + Budget.getInitialBudgetString() + \" has been set.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":179,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":180,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":181,"author":{"gitId":"ryan1604"},"content":" public void printBudgetExceedBalance() {","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Since initial budget exceeds current balance, budget will be reset to current balance.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":183,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":185,"author":{"gitId":"ryan1604"},"content":" public void printBudgetError(String errorType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"ryan1604"},"content":" switch (errorType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":187,"author":{"gitId":"ryan1604"},"content":" case \"delete\":","lastModifiedDate":"2023-10-25"},{"lineNumber":188,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has not been set yet.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":189,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"ryan1604"},"content":" case \"reset\":","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has not been spent yet.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":192,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":193,"author":{"gitId":"ryan1604"},"content":" case \"view\":","lastModifiedDate":"2023-10-25"},{"lineNumber":194,"author":{"gitId":"ryan1604"},"content":" showMessage(\"There is no existing budget.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":195,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":196,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":197,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-27"},{"lineNumber":198,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Unknown command\");","lastModifiedDate":"2023-10-25"},{"lineNumber":199,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":200,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":201,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":59,"NeoMinWei":22,"ryan1604":106,"YFshadaow":14}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"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":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortType(CashflowList cashflowList, String type)","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" case \"expense\":","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing expenses\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" return sortExpenses(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" case \"income\":","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing income\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" return sortIncome(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(type + \" Type not found\");","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortExpenses(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e expensesByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" String key \u003d e.getExpenseType().toString().toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d expensesByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" expensesByCat.put(key, value);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" return expensesByCat;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortIncome(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e incomeByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Income) {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" String key \u003d e.getIncomeType().toString().toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d incomeByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" incomeByCat.put(key, value);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" return incomeByCat;","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":46,"NeoMinWei":8,"ryan1604":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":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" public static void displayChart(String chart, Map\u003cString, Double\u003e cashFlowByCat, String type)","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" switch (chart) {","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" case \"pie\":","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" displayPieChart(cashFlowByCat, type);","lastModifiedDate":"2023-10-24"},{"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(cashFlowByCat, type);","lastModifiedDate":"2023-10-24"},{"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 + \" Chart Type Not Found\");","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" public static void displayPieChart (Map\u003cString, Double\u003e expensesByCat, String type) {","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" PieChart chart \u003d new PieChartBuilder().width(800).height(600).title(type).build();","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" Color[] sliceColors \u003d new Color[] {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" new Color(21, 224, 14),","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" new Color(62, 154, 230),","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" new Color(236, 186, 110),","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" new Color(243, 159, 242),","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" new Color(246, 182, 197),","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" new Color(210, 24, 24),","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" new Color(211, 164, 8),","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" };","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setSeriesColors(sliceColors);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" for (Map.Entry\u003cString, Double\u003e set: expensesByCat.entrySet()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(set.getKey(), set.getValue());","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Pie Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" // Show it","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","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":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" public static void displayBarChart (Map\u003cString, Double\u003e expensesByCat, String type) {","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" CategoryChart chart \u003d new CategoryChartBuilder().width(800).height(600)","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" .title(type).xAxisTitle(\"Type\").yAxisTitle(\"Value\").build();","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNW);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setHasAnnotations(true);","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" assert !expensesByCat.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" // Series","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" List\u003cDouble\u003e values \u003d new ArrayList\u003cDouble\u003e(expensesByCat.values());","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" List\u003cString\u003e keys \u003d new ArrayList\u003cString\u003e(expensesByCat.keySet());","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(\"Expense\", keys, values);","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Bar Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":79,"ryan1604":2}},{"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/cashflow/BudgetTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(500);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" assertTrue(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" @Order(2)","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" public void testNewExpense() {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand testExpense \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 50 /t dining\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" testExpense.execute();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" assertEquals(450, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"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":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" @Order(3)","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" public void testUpdateBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(300);","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" assertEquals(300, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" assertEquals(250, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(1000);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" assertEquals(950, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" @Order(4)","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" public void testSetInitialBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" Budget.setInitialBudget(1500);","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" @Order(5)","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" public void testUpdateCurrentBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" Budget.updateCurrentBudget(50);","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" @Order(6)","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" public void testResetBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" Budget.resetBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" @Order(7)","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" public void testDeleteBudget() {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" assertEquals(0, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" assertEquals(0, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" @Order(8)","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" public void testLoadBudget() {","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" Budget.load(100, 100);","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" assertEquals(100, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" assertEquals(100, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":3,"ryan1604":82}},{"path":"src/test/java/seedu/financialplanner/cashflow/CashflowListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.cashflow;","lastModifiedDate":"2023-10-28"},{"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, \"part time job\");","lastModifiedDate":"2023-10-28"},{"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":" assertEquals(\"part time job\", testIncome.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" testList.addIncome(15.999, IncomeType.INVESTMENTS, 0, \"AAPL\");","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" testIncome \u003d testList.list.get(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testIncome.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testIncome instanceof Income);","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"16.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(IncomeType.INVESTMENTS, testIncome.getIncomeType());","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testIncome.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"31.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"AAPL\", testIncome.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(10, ExpenseType.DINING, 0, \"double mcspicy\");","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" Cashflow testExpense \u003d testList.list.get(2);","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"10.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.DINING, testExpense.getExpenseType());","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"21.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"double mcspicy\", testExpense.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(19.999, ExpenseType.ENTERTAINMENT, 30, \"netflix\");","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" testExpense \u003d testList.list.get(3);","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"20.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.ENTERTAINMENT, testExpense.getExpenseType());","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"1.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"netflix\", testExpense.description);","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" void testDeleteIncomeAndExpense() {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithCategory(CashflowCategory.INCOME, 2);","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(3, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" double roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-15.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithoutCategory(1);","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(2, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-30.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithCategory(CashflowCategory.EXPENSE, 2);","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(1, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-10.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflowWithoutCategory(1);","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"0.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":86,"ryan1604":2,"YFshadaow":1}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"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":"wwweert123"},"content":" private WatchList watchList \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"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":{"wwweert123":1,"NeoMinWei":28,"YFshadaow":6}},{"path":"src/test/java/seedu/financialplanner/commands/BudgetCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Order;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.TestMethodOrder;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Budget;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Cashflow;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"@TestMethodOrder(OrderAnnotation.class)","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"public class BudgetCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" @Order(1)","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" public void testSetBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" Cashflow.setBalance(2000);","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b 1000\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" assertTrue(Budget.hasBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" @Order(2)","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" public void testUpdateBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget update /b 1500\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" @Order(3)","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public void testResetBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget reset\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" AddCashflowCommand testExpense \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 50 /t dining\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" testExpense.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" assertEquals(1500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" Budget.deduct(50);","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" Cashflow.setBalance(1000);","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudgetExceedBalance \u003d new BudgetCommand(Parser.parseRawCommand(\"budget reset\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" testBudgetExceedBalance.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" @Order(4)","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" public void testDeleteBudget() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget delete\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" testBudget.execute();","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" @Order(5)","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" public void testInvalidCommandFormat_throwsException() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testExtraArgument \u003d new BudgetCommand(Parser.parseRawCommand(\"budget\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" \" set /b 500 /t sdf\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Unknown extra argument: t\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testInvalidCommand \u003d new BudgetCommand(Parser.parseRawCommand(\"budget random /b 5\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget command must be one of the following: set, update, \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" \"delete, reset, view.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(5);","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testSetAndHasBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b 55\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"There is an existing budget, did you mean update?\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" Budget.deleteBudget();","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testUpdateAndNoBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget update \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" \"/b 500\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"There is no budget set yet, did you mean set?\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testMissingArgument \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Missing /b argument.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" @Order(6)","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" public void testInvalidBudget_throwsException() throws FinancialPlannerException {","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testStringBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b f\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget must be a number.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testNegativeBudget \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b -5\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget should be greater than 0.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":" Cashflow.clearBalance();","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":" BudgetCommand testBudgetExceedBalance \u003d new BudgetCommand(Parser.parseRawCommand(\"budget set /b 500\"));","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-27"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":" assertEquals(\"Budget should be lower than total balance.\", e.getMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":120}},{"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.junit.jupiter.api.MethodOrderer;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.Order;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.TestMethodOrder;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"@TestMethodOrder(MethodOrderer.OrderAnnotation.class)","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"class WatchListTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" @Order(1)","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" void fetchFMPStockPrices() throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" wl.getLatestWatchlistInfo();","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" HashMap\u003cString, Stock\u003e stocks \u003d wl.getStocks();","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" assertNotNull(stocks.get(\"AAPL\").getPrice());","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" assertNotNull(stocks.get(\"GOOGL\").getPrice());","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" // Might need to update this test","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" @Order(2)","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" void addStock() throws Exception {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" String stockCode \u003d \"GME\";","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" assertEquals(\"Gamestop Corporation - Class A\", wl.addStock(stockCode));","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" @Order(3)","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" void deleteStock() throws FinancialPlannerException {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" WatchList wl \u003d WatchList.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" String stockCode \u003d \"GME\";","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" assertEquals(\"Gamestop Corporation - Class A\", wl.deleteStock(stockCode));","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"wwweert123":43}},{"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":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Expense;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.CashflowList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.cashflow.Income;","lastModifiedDate":"2023-10-28"},{"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":" protected Storage storage \u003d Storage.getInstance();","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" public void loadValidData() throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" storage.load(\"src/test/testData/ValidData.txt\");","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" String actual \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" String expected \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public void loadInvalidData_userInputNo() {","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":"ryan1604"},"content":" () -\u003e storage.load(\"src/test/testData/InvalidData.txt\"));","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":" storage.save(String.valueOf(testFolder.resolve(\"temp.txt\")));","lastModifiedDate":"2023-10-23"},{"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":"ryan1604"},"content":" assertThrows(FinancialPlannerException.class, () -\u003e storage.save(\"\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"YFshadaow"},"content":" private void getTestData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.load(new Income(123.12, IncomeType.ALLOWANCE, 0, null));","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.load(new Expense(100, ExpenseType.SHOPPING, 30, \"shopee\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":12,"ryan1604":46,"YFshadaow":10}}] diff --git a/AY2324S1-CS2113-T18-2_tp_master/commits.json b/AY2324S1-CS2113-T18-2_tp_master/commits.json index 956f35d..7f3555d 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":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"9f4a09be63259c43bd6fce4a55332a13d793ec68","isMergeCommit":false,"messageTitle":"Add functionality to delete stock from watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":1}}},{"hash":"7e21749289f35e37f0c83c8f6ce72d2958d8c635","isMergeCommit":false,"messageTitle":"Isolate JSON object to a single method to reduce chances of bug and give possibility of caching","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":46,"deletions":14}}},{"hash":"b49d747d818583fd3cca5bac61ffcf61ab59c94e","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"0f3b189cd17093c5ac7e60d63934b0446d19dda4","isMergeCommit":false,"messageTitle":"Update JUnit test due to changes in method implementation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":16,"deletions":11}}}]},{"date":"2023-10-23","commitResults":[{"hash":"0cb2c8190942d33ae0f6a9e094dbbcd02a50ce9d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into DeleteWatchList","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/WatchListCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"fc2a9f8444ad097c48f388f6a0510c94481b575e","isMergeCommit":false,"messageTitle":"Change watchlist singleton access method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7},"test-code":{"insertions":4,"deletions":4}}},{"hash":"d73a5d597b5a1bff82e031898ab0cf938e5ae620","isMergeCommit":false,"messageTitle":"Improve code quality in accordance to reviewers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"c0d66053cd92b47cb444435e2f30e55047b9d210","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":7}}},{"hash":"a00abae470787cca65c55f6c4a867faa3e1d8a5c","isMergeCommit":true,"messageTitle":"Merge pull request #98 from wwweert123/DeleteWatchList","messageBody":"Delete watch list","fileTypesAndContributionMap":{}},{"hash":"890fc0d7877d7e156bc7303d84168b085542471f","isMergeCommit":false,"messageTitle":"Create method to save and load watchlist data to file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":0}}},{"hash":"8700572d1c9a8ddad641307b473f8a2b39a03bf5","isMergeCommit":false,"messageTitle":"Add calls to load and save methods in required areas","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":6}}},{"hash":"23a689f8e1269eb0c7bf84282a588da8d65b8256","isMergeCommit":false,"messageTitle":"Make stock serializable","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"55101bf4b40825d68ee3cbe3881590a37ab77385","isMergeCommit":false,"messageTitle":"Fix Test case for fetching stock prices","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"232ce50c57d8211e808b7e4cb44c33a3393c40c4","isMergeCommit":false,"messageTitle":"Change colour for visualizer","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"534928547ad577210773c1f7dc3e8d4fb1ff6a82","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WatchlistStoraage","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/storage/LoadData.java\n#\tsrc/main/java/seedu/financialplanner/storage/SaveData.java\n","fileTypesAndContributionMap":{}},{"hash":"3f962dd0ac6a834e997ce2c77c602f80cdb3b8e4","isMergeCommit":false,"messageTitle":"Change to save watchlist only when exiting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"7f8f76935e4a066fddfdbd7f1950d5ab0caa5002","isMergeCommit":false,"messageTitle":"fix checkstly error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2bf5672bb389312c948d2408216b6e1cccf27159","isMergeCommit":false,"messageTitle":"Remove unused Imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-24","commitResults":[{"hash":"3c6d3a091066c1e4ad736ed49761f23b168b4a0b","isMergeCommit":true,"messageTitle":"Merge pull request #104 from wwweert123/WatchlistStoraage","messageBody":"Watchlist storaage","fileTypesAndContributionMap":{}},{"hash":"99c4cc5129b3da88815448476934d4dc8f1d3e2e","isMergeCommit":false,"messageTitle":"Add description for the visualization feature in developers guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":0}}},{"hash":"30e7abb6afe5a788025b4cc9bf276bc4016a7e7f","isMergeCommit":false,"messageTitle":"Add necessity to the error handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"351638778793c0b541ba6688cdc165881a54b0e5","isMergeCommit":false,"messageTitle":"Add title display for visualization of charats","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":9}}},{"hash":"3066e3ac34446a5739eafda8ee2f116aaf4238c0","isMergeCommit":false,"messageTitle":"Add class UML diagram for visualization","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":0}}},{"hash":"93663628a169524515042589762b2622c091bdb3","isMergeCommit":false,"messageTitle":"Rename directory","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"9f50d88b075dbb702266bb4a0e6727040b421d47","isMergeCommit":false,"messageTitle":"Add acknowledgement for sources used by Frederick","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":0}}},{"hash":"a45215efa03cc5b8a382f5996e8863c5634a9136","isMergeCommit":false,"messageTitle":"Add description for visualization feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":22,"deletions":2}}},{"hash":"abac801dc6610f4bb5d4e02736db135b90556b33","isMergeCommit":false,"messageTitle":"Add printing of message using ui singleton when visualizing cashflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":2}}}]},{"date":"2023-10-25","commitResults":[{"hash":"d314f8e128228bb2a4e313048d4d3800e5354069","isMergeCommit":false,"messageTitle":"Create Sequence UML for overall visualisation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":0}}},{"hash":"fcf64449e34c5f7cd5bdaf35611dc0d3d63a2b29","isMergeCommit":false,"messageTitle":"Create Sequence UML for categorizer","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":0}}},{"hash":"9d446349ea9f6b7a710820f7147e0dcdf84a3b20","isMergeCommit":false,"messageTitle":"Create Sequence UML for visualizer","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":0}}},{"hash":"3e334b94e49411de9db19303f6e4d80814ad1919","isMergeCommit":false,"messageTitle":"Add diagrams images to developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":2}}},{"hash":"ab5707322c4b7541d3c6e38eff04caf9a6ccc5d8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into VisDG","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"47c5b75463c2531b95c009f0906c75905fe3e79c","isMergeCommit":true,"messageTitle":"Merge pull request #108 from wwweert123/VisDG","messageBody":"Vis dg","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"21773315b5b33b1bad51a78c1b17678fc4e98fe8","isMergeCommit":false,"messageTitle":"Fix Junit for stock delete","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":9,"deletions":2}}},{"hash":"521139faa1b05419956e7ec6d07a1177d61a879f","isMergeCommit":false,"messageTitle":"Add cap to watchlist max stocks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"6dda9db4161d3ccb8042e28f3317e341d777be7f","isMergeCommit":false,"messageTitle":"Add disallowing of adding multiple of duplicate stocks to watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"d94d5d4abaa0a4c0f5b06b5536858ebb32058b90","isMergeCommit":false,"messageTitle":"Add check for correct size of JSON array response received","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"7d0d95006240c96ec6ecd789699dcbe9bf8622f2","isMergeCommit":false,"messageTitle":"Add check for the correct matching of JSON stock object to stock class object","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"e589a22a98e287186ce9ef35210fb0325136e0ce","isMergeCommit":false,"messageTitle":"Add the getting and printing of additional watchlist information (Market, daily high, daily low)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":61,"deletions":7}}},{"hash":"ec6fefc088fb562e542bd3cf64be9ab02cbe1f09","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}}]},{"date":"2023-10-27","commitResults":[{"hash":"d928fba83fed3e42c33e03f98565b84a3fcd3a59","isMergeCommit":true,"messageTitle":"Merge pull request #115 from wwweert123/FIxTestStock","messageBody":"Fix Junit for stock delete","fileTypesAndContributionMap":{}},{"hash":"f966c522ed58082edd1aead60e9efc1df674e51b","isMergeCommit":false,"messageTitle":"Refactor Code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":20}}},{"hash":"bb468952fc09cfb8c41a9e010ddbb5130e4dbc3f","isMergeCommit":true,"messageTitle":"Merge pull request #116 from wwweert123/watchlistEnhancement","messageBody":"Watchlist enhancement","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":{}},{"hash":"df13bf64fe71770b01403a0c69a89f465db87410","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4727ec201e21927e13f40a0c34c6bc8fe80d0460","isMergeCommit":false,"messageTitle":"Fix assertion bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"78e885388c0e166556932ee690e23a7208580b4c","isMergeCommit":true,"messageTitle":"Merge pull request #103 from NeoMinWei/Branch-IncomeCategoryBugFix","messageBody":"Branch income category bug fix","fileTypesAndContributionMap":{}},{"hash":"1edb7f0f4213a367b3de9548a7a2833ac629d3f6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"bc66820c21c502609fa59ff04a06d86d73d5b834","isMergeCommit":false,"messageTitle":"Add acknowledgements to DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":0}}},{"hash":"2045e223d05df6f20dcc1a89adcb4b9240bcdc62","isMergeCommit":false,"messageTitle":"Add sequence diagram for add cashflow mechanism","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":0}}},{"hash":"371a4be0a130b7a04e282c65ffeb8c393aed42d6","isMergeCommit":false,"messageTitle":"Add Cashflow class diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":33,"deletions":0}}},{"hash":"e9b34745a291deb58c999b29946bc642bd096279","isMergeCommit":false,"messageTitle":"Add Cashflow sequence diagram image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ed48bd06fb1058ff32ae61558b3970bcb25cdbfa","isMergeCommit":false,"messageTitle":"Update sequence","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":8}}},{"hash":"74f6960448f47adae6b4bdbd4dcc1163f72843da","isMergeCommit":false,"messageTitle":"Update class diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ba4027efe30bb026162c36a165a2d18d735282ee","isMergeCommit":false,"messageTitle":"Update UG with add income/expense feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":45,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"7c95abd280fb99cbc170653776856a389685314e","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ae8761b1898e80dc0f6a5754ed181125a251abce","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fb5043a60275972bb89c129cee4e39ce92ea1888","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-UMLforIncomeAndExpense","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"f4b51909654a690c3b2ecb2bd620926dd1326940","isMergeCommit":true,"messageTitle":"Merge pull request #111 from NeoMinWei/Branch-UMLforIncomeAndExpense","messageBody":"UML for income and expense","fileTypesAndContributionMap":{}},{"hash":"15ae6707427c114509ffd3b62294c199b8facb41","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d3ca0986187d0ea6822080bd28e0ac98ab7c0143","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"656d50e12e416b164337282e07aeee816146ad7d","isMergeCommit":false,"messageTitle":"Add description argument","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":13}}},{"hash":"b5acf6d892eec6e5b7ea16ecd331f011408758c0","isMergeCommit":false,"messageTitle":"Update tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":10,"deletions":6}}},{"hash":"96645cb039afa0245efc92e148f14b590b2a9e88","isMergeCommit":false,"messageTitle":"Update storage for cashflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":4}}},{"hash":"4a5cdc73d8b300be5b22d81a4756f7a0aa7b14d2","isMergeCommit":false,"messageTitle":"Add logging for getting description","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"e27031ba253b578571b583d6e6e92634e07a416a","isMergeCommit":false,"messageTitle":"Rename list package to cashflow for clarity","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":36},"other":{"insertions":13,"deletions":13},"test-code":{"insertions":6,"deletions":6}}},{"hash":"54173570879976b60ac2874a428cd6f6b0eb7862","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a0a57fb7be86a7c43635d9e92627f5e496c18819","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-IncomeDescription","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e73f490a7dadf73874a656daa8cb828c2a1b5b30","isMergeCommit":false,"messageTitle":"Refactor code to make it more neat","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":14}}},{"hash":"d7b3cf055cd0887b10ce1eea72c80c3909a8fe93","isMergeCommit":false,"messageTitle":"Add exception when description is empty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"543ea73335c896efae2325529f1f2835c70b1e35","isMergeCommit":true,"messageTitle":"Merge pull request #118 from NeoMinWei/Branch-IncomeDescription","messageBody":"Branch income description","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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"ee85fdd3450c29e6f2fa8ea93bc9d3aa8a7ee4ac","isMergeCommit":false,"messageTitle":"Update error handling for storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":14}}},{"hash":"e33e09d9d6bca826602f6a0a646029f3ff5f69f3","isMergeCommit":false,"messageTitle":"Rename AbstractCommand to Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":18},"other":{"insertions":1,"deletions":1}}},{"hash":"21edafcc87654ea480d1c35ab2ec453623792070","isMergeCommit":false,"messageTitle":"Update singleton and error handling for storage, refactor storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":17},"test-code":{"insertions":6,"deletions":8}}},{"hash":"b4bf06354ec1e651df2c1b0835e8c82c2c4d796b","isMergeCommit":false,"messageTitle":"Add ability to delete, reset and view budget","messageBody":"Fixes #74\n","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":14}}},{"hash":"2ad5082d556bde5cd1dacfa4c3f9abcdf11f49a5","isMergeCommit":false,"messageTitle":"Refactor Budget, fix bug and clean up code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":78}}},{"hash":"f3d525423735d5a193da257d3b598f941e8a3a4b","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":69,"deletions":0}}},{"hash":"ea37034ac84b421b3b6038ea67cc563809a4ba80","isMergeCommit":false,"messageTitle":"Add balance command","messageBody":"Fixes #100\n","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":0}}},{"hash":"4f0d456e878d1f1cab572bcd372c767ddcad1c25","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"7d46886ffb53b08a1cd0ac3da012cf32dad037cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-budget","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/investments/WatchList.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"67fddc3c6856207ecdb706ba890e3351cd224e96","isMergeCommit":false,"messageTitle":"Edit FinancialPlanner","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"50e26e9bff8931193e94816246a8442e86620007","isMergeCommit":true,"messageTitle":"Merge pull request #101 from ryan1604/branch-budget","messageBody":"Update budget and clean up code","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"dc34fb4f3597f37652bbf91bb168e07ebfbea8ee","isMergeCommit":false,"messageTitle":"Add sequence diagrams for budgetcommand","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":75,"deletions":0}}},{"hash":"614c03bccff12e4aeb95e9cf908b81db9760f46c","isMergeCommit":false,"messageTitle":"Fix bug in loadBudget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"96fe8e91919e5f59141946ed846c5cd4d3804c43","isMergeCommit":false,"messageTitle":"Add class diagram for storage","messageBody":"Add style.puml from addressbook-level3\n","fileTypesAndContributionMap":{"docs":{"insertions":117,"deletions":0}}},{"hash":"98db3870b2a1642d81b534a75b87f89cbb095ed1","isMergeCommit":false,"messageTitle":"Update DG and diagrams","messageBody":"Fixes #106\n","fileTypesAndContributionMap":{"docs":{"insertions":58,"deletions":4}}},{"hash":"46f08fe1df842f6d9a3e2a66e809e49bc1061e96","isMergeCommit":false,"messageTitle":"Fix error in storage diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"364cd90ab3889d86ba988ddec7c0bccc890e5c48","isMergeCommit":false,"messageTitle":"Change names in diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":9}}},{"hash":"53ec46b8455c109fbca2162f43ea911d5199efb5","isMergeCommit":true,"messageTitle":"Merge pull request #107 from ryan1604/branch-bugfix","messageBody":"Fix bug in loadBudget","fileTypesAndContributionMap":{}},{"hash":"c3b9f2891401df69d30c54d1661cf3c73fa78ce5","isMergeCommit":true,"messageTitle":"Merge pull request #110 from ryan1604/branch-uml","messageBody":"Add diagrams for budgetcommand and storage","fileTypesAndContributionMap":{}},{"hash":"db195afb3523823484f75b050f34047deeb7d5a5","isMergeCommit":false,"messageTitle":"Fix visual in DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":3}}},{"hash":"f3448a2440740014b14b206a8e2d881ca217b47f","isMergeCommit":true,"messageTitle":"Merge pull request #113 from ryan1604/branch-uml","messageBody":"Fix visual in DG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"11b2b150107f908f239f2469ec021ebd049f9a80","isMergeCommit":false,"messageTitle":"Update storage diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":12}}},{"hash":"6d04cb1d2126251eff52ef166980bc558c51f506","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":19}}},{"hash":"2a16939ea19a75e7be88095960d6d869f369ce06","isMergeCommit":false,"messageTitle":"Update overview command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":14}}},{"hash":"2ee59837d6969e00885d562bf8af21898bf7a84f","isMergeCommit":false,"messageTitle":"Extract method in budget command and update DG","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":17},"docs":{"insertions":5,"deletions":5}}},{"hash":"6fa7dc87d5df38ce68d2ee34261b65c9249d5951","isMergeCommit":false,"messageTitle":"Add assertion to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-27","commitResults":[{"hash":"7590b789233a6734bdc9d6c105001eb4a077d540","isMergeCommit":false,"messageTitle":"Add logging to ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"02571fe412b0507a0021ac111ef1371cda6b7d15","isMergeCommit":false,"messageTitle":"Add variables to improve readability","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2}}},{"hash":"c92ed860899ec19d3845231e1c01266fae39553f","isMergeCommit":false,"messageTitle":"Update sequence diagrams","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":12,"deletions":13}}},{"hash":"646af5464658b7ea77bcbefc51057c0b97005830","isMergeCommit":true,"messageTitle":"Merge pull request #114 from ryan1604/branch-overvieww","messageBody":"Update overview command and DG","fileTypesAndContributionMap":{}},{"hash":"412fc190e1de534e10dd256066463d2ea4fe7937","isMergeCommit":false,"messageTitle":"Update JUnit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":97,"deletions":0}}}]},{"date":"2023-10-28","commitResults":[{"hash":"a3fc3c5b0968c530439ef2f345088f3161f70ce7","isMergeCommit":false,"messageTitle":"Update UG and fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7},"docs":{"insertions":160,"deletions":16}}},{"hash":"261dfa7799f523f1b961c1b70782fe590f570b91","isMergeCommit":false,"messageTitle":"Fix sentence in DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e379b2a147d4ffc4d27cb3f4d955c7a5d4b1c8da","isMergeCommit":true,"messageTitle":"Merge pull request #117 from ryan1604/branch-JUnit","messageBody":"Update JUnit tests","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"715d104667aefc79944d664c609de2f22381a734","isMergeCommit":false,"messageTitle":"Add table of contents to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":1}}},{"hash":"f84cb8f899f63448a08a00588bef6f5b2f5968aa","isMergeCommit":true,"messageTitle":"Merge pull request #119 from ryan1604/branch-UG","messageBody":"Update UG and fix minor bugs","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":178,"functional-code":680,"test-code":43,"other":3},"NeoMinWei":{"docs":119,"functional-code":593,"test-code":131},"ryan1604":{"docs":421,"functional-code":817,"test-code":252,"other":2},"YFshadaow":{"docs":0,"functional-code":294,"test-code":17},"hshiah":{"docs":0,"functional-code":205,"test-code":0}},"authorContributionVariance":{"wwweert123":4509.1733,"NeoMinWei":12832.444,"ryan1604":20606.352,"YFshadaow":7598.486,"hshiah":1004.79504},"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":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"9f4a09be63259c43bd6fce4a55332a13d793ec68","isMergeCommit":false,"messageTitle":"Add functionality to delete stock from watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":1}}},{"hash":"7e21749289f35e37f0c83c8f6ce72d2958d8c635","isMergeCommit":false,"messageTitle":"Isolate JSON object to a single method to reduce chances of bug and give possibility of caching","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":46,"deletions":14}}},{"hash":"b49d747d818583fd3cca5bac61ffcf61ab59c94e","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"0f3b189cd17093c5ac7e60d63934b0446d19dda4","isMergeCommit":false,"messageTitle":"Update JUnit test due to changes in method implementation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":16,"deletions":11}}}]},{"date":"2023-10-23","commitResults":[{"hash":"0cb2c8190942d33ae0f6a9e094dbbcd02a50ce9d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into DeleteWatchList","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/WatchListCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"fc2a9f8444ad097c48f388f6a0510c94481b575e","isMergeCommit":false,"messageTitle":"Change watchlist singleton access method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7},"test-code":{"insertions":4,"deletions":4}}},{"hash":"d73a5d597b5a1bff82e031898ab0cf938e5ae620","isMergeCommit":false,"messageTitle":"Improve code quality in accordance to reviewers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"c0d66053cd92b47cb444435e2f30e55047b9d210","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":7}}},{"hash":"a00abae470787cca65c55f6c4a867faa3e1d8a5c","isMergeCommit":true,"messageTitle":"Merge pull request #98 from wwweert123/DeleteWatchList","messageBody":"Delete watch list","fileTypesAndContributionMap":{}},{"hash":"890fc0d7877d7e156bc7303d84168b085542471f","isMergeCommit":false,"messageTitle":"Create method to save and load watchlist data to file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":0}}},{"hash":"8700572d1c9a8ddad641307b473f8a2b39a03bf5","isMergeCommit":false,"messageTitle":"Add calls to load and save methods in required areas","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":6}}},{"hash":"23a689f8e1269eb0c7bf84282a588da8d65b8256","isMergeCommit":false,"messageTitle":"Make stock serializable","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"55101bf4b40825d68ee3cbe3881590a37ab77385","isMergeCommit":false,"messageTitle":"Fix Test case for fetching stock prices","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"232ce50c57d8211e808b7e4cb44c33a3393c40c4","isMergeCommit":false,"messageTitle":"Change colour for visualizer","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"534928547ad577210773c1f7dc3e8d4fb1ff6a82","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WatchlistStoraage","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/storage/LoadData.java\n#\tsrc/main/java/seedu/financialplanner/storage/SaveData.java\n","fileTypesAndContributionMap":{}},{"hash":"3f962dd0ac6a834e997ce2c77c602f80cdb3b8e4","isMergeCommit":false,"messageTitle":"Change to save watchlist only when exiting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"7f8f76935e4a066fddfdbd7f1950d5ab0caa5002","isMergeCommit":false,"messageTitle":"fix checkstly error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2bf5672bb389312c948d2408216b6e1cccf27159","isMergeCommit":false,"messageTitle":"Remove unused Imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-24","commitResults":[{"hash":"3c6d3a091066c1e4ad736ed49761f23b168b4a0b","isMergeCommit":true,"messageTitle":"Merge pull request #104 from wwweert123/WatchlistStoraage","messageBody":"Watchlist storaage","fileTypesAndContributionMap":{}},{"hash":"99c4cc5129b3da88815448476934d4dc8f1d3e2e","isMergeCommit":false,"messageTitle":"Add description for the visualization feature in developers guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":0}}},{"hash":"30e7abb6afe5a788025b4cc9bf276bc4016a7e7f","isMergeCommit":false,"messageTitle":"Add necessity to the error handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"351638778793c0b541ba6688cdc165881a54b0e5","isMergeCommit":false,"messageTitle":"Add title display for visualization of charats","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":9}}},{"hash":"3066e3ac34446a5739eafda8ee2f116aaf4238c0","isMergeCommit":false,"messageTitle":"Add class UML diagram for visualization","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":0}}},{"hash":"93663628a169524515042589762b2622c091bdb3","isMergeCommit":false,"messageTitle":"Rename directory","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"9f50d88b075dbb702266bb4a0e6727040b421d47","isMergeCommit":false,"messageTitle":"Add acknowledgement for sources used by Frederick","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":0}}},{"hash":"a45215efa03cc5b8a382f5996e8863c5634a9136","isMergeCommit":false,"messageTitle":"Add description for visualization feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":22,"deletions":2}}},{"hash":"abac801dc6610f4bb5d4e02736db135b90556b33","isMergeCommit":false,"messageTitle":"Add printing of message using ui singleton when visualizing cashflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":2}}}]},{"date":"2023-10-25","commitResults":[{"hash":"d314f8e128228bb2a4e313048d4d3800e5354069","isMergeCommit":false,"messageTitle":"Create Sequence UML for overall visualisation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":0}}},{"hash":"fcf64449e34c5f7cd5bdaf35611dc0d3d63a2b29","isMergeCommit":false,"messageTitle":"Create Sequence UML for categorizer","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":0}}},{"hash":"9d446349ea9f6b7a710820f7147e0dcdf84a3b20","isMergeCommit":false,"messageTitle":"Create Sequence UML for visualizer","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":0}}},{"hash":"3e334b94e49411de9db19303f6e4d80814ad1919","isMergeCommit":false,"messageTitle":"Add diagrams images to developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":2}}},{"hash":"ab5707322c4b7541d3c6e38eff04caf9a6ccc5d8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into VisDG","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"47c5b75463c2531b95c009f0906c75905fe3e79c","isMergeCommit":true,"messageTitle":"Merge pull request #108 from wwweert123/VisDG","messageBody":"Vis dg","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"21773315b5b33b1bad51a78c1b17678fc4e98fe8","isMergeCommit":false,"messageTitle":"Fix Junit for stock delete","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":9,"deletions":2}}},{"hash":"521139faa1b05419956e7ec6d07a1177d61a879f","isMergeCommit":false,"messageTitle":"Add cap to watchlist max stocks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"6dda9db4161d3ccb8042e28f3317e341d777be7f","isMergeCommit":false,"messageTitle":"Add disallowing of adding multiple of duplicate stocks to watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"d94d5d4abaa0a4c0f5b06b5536858ebb32058b90","isMergeCommit":false,"messageTitle":"Add check for correct size of JSON array response received","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"7d0d95006240c96ec6ecd789699dcbe9bf8622f2","isMergeCommit":false,"messageTitle":"Add check for the correct matching of JSON stock object to stock class object","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"e589a22a98e287186ce9ef35210fb0325136e0ce","isMergeCommit":false,"messageTitle":"Add the getting and printing of additional watchlist information (Market, daily high, daily low)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":61,"deletions":7}}},{"hash":"ec6fefc088fb562e542bd3cf64be9ab02cbe1f09","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}}]},{"date":"2023-10-27","commitResults":[{"hash":"d928fba83fed3e42c33e03f98565b84a3fcd3a59","isMergeCommit":true,"messageTitle":"Merge pull request #115 from wwweert123/FIxTestStock","messageBody":"Fix Junit for stock delete","fileTypesAndContributionMap":{}},{"hash":"f966c522ed58082edd1aead60e9efc1df674e51b","isMergeCommit":false,"messageTitle":"Refactor Code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":20}}},{"hash":"bb468952fc09cfb8c41a9e010ddbb5130e4dbc3f","isMergeCommit":true,"messageTitle":"Merge pull request #116 from wwweert123/watchlistEnhancement","messageBody":"Watchlist enhancement","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"adf67a619a295e8354e3e1b591b7abe709b3a3ed","isMergeCommit":false,"messageTitle":"Update class diagram for Visualization","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":18}}},{"hash":"5c48a7cca355a518af5837bfc50b568c9c9b2982","isMergeCommit":false,"messageTitle":"Update visualization sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-29","commitResults":[{"hash":"19d3b69db5bc5063bfde4d6be606912953666e50","isMergeCommit":false,"messageTitle":"Fix class diagram for visualization","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"d229be59baa1ba1901364c90f23a4af5a11efe67","isMergeCommit":false,"messageTitle":"Changed colour scheme for visualization class","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"d4b107ff42dea1cdcaa71ade1a8e3fe28bd517a9","isMergeCommit":true,"messageTitle":"Merge pull request #122 from wwweert123/VisDG","messageBody":"Update class diagram for Visualization","fileTypesAndContributionMap":{}},{"hash":"6dedfb58f1ed47f44aa8951b14ef7a989e27afeb","isMergeCommit":false,"messageTitle":"Add hyperlink to DG acknowlegdements","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"eada3bc5138a8060034ab0eca3e3e83340af6bb7","isMergeCommit":false,"messageTitle":"Update parameter name to chart for standardization","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"876b05664326f560f0600b5f1c6c877a238a7deb","isMergeCommit":false,"messageTitle":"Update diagrams to match code","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ecc19c8e4323a0e8298428ce6387251919a07eee","isMergeCommit":false,"messageTitle":"Update UG for visualization feature and watchlist features","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":71,"deletions":0}}},{"hash":"12b45c55eb06fbb16f038d7210d9203a8d1afb68","isMergeCommit":false,"messageTitle":"Refactor code and add 2 additonal fields (last updated and last fetched) to watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":25}}},{"hash":"57fc65e18f26ad8dec4f4a3f9efd395914a2b6a4","isMergeCommit":false,"messageTitle":"Chang watchlist data structure to hashmap for easy access and exception handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":37},"test-code":{"insertions":5,"deletions":3}}},{"hash":"23f49b5022c4b5c357678720e93855eac0a406d2","isMergeCommit":false,"messageTitle":"Add check for up to date stock to prevent overloading API","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":11},"test-code":{"insertions":1,"deletions":1}}},{"hash":"18197d715fbe34314eb6997aa20e65280dc5fc1b","isMergeCommit":false,"messageTitle":"Remove todos that is completed","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"a4a02044920878ea4ec1587b5b275dd8e7687071","isMergeCommit":false,"messageTitle":"Fix bug and Fix checkstylemain","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":15}}},{"hash":"22dee000f82c19accb5f7c4c8fe5758571d76ba2","isMergeCommit":false,"messageTitle":"Fix Typo and description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"3ea07df65421c3d8cce2b46e0c6196bb7614c89b","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"3fc916744042b73f3a7d98cddf66bbfc7223538f","isMergeCommit":true,"messageTitle":"Merge pull request #124 from wwweert123/DGUGFrederick","messageBody":"DDUG frederick","fileTypesAndContributionMap":{}},{"hash":"a53c1984e9308604b54991a5ac4b799544638a96","isMergeCommit":true,"messageTitle":"Merge pull request #125 from wwweert123/WatchlistCaching","messageBody":"Watchlist caching","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":{}},{"hash":"df13bf64fe71770b01403a0c69a89f465db87410","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4727ec201e21927e13f40a0c34c6bc8fe80d0460","isMergeCommit":false,"messageTitle":"Fix assertion bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"78e885388c0e166556932ee690e23a7208580b4c","isMergeCommit":true,"messageTitle":"Merge pull request #103 from NeoMinWei/Branch-IncomeCategoryBugFix","messageBody":"Branch income category bug fix","fileTypesAndContributionMap":{}},{"hash":"1edb7f0f4213a367b3de9548a7a2833ac629d3f6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"bc66820c21c502609fa59ff04a06d86d73d5b834","isMergeCommit":false,"messageTitle":"Add acknowledgements to DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":0}}},{"hash":"2045e223d05df6f20dcc1a89adcb4b9240bcdc62","isMergeCommit":false,"messageTitle":"Add sequence diagram for add cashflow mechanism","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":0}}},{"hash":"371a4be0a130b7a04e282c65ffeb8c393aed42d6","isMergeCommit":false,"messageTitle":"Add Cashflow class diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":33,"deletions":0}}},{"hash":"e9b34745a291deb58c999b29946bc642bd096279","isMergeCommit":false,"messageTitle":"Add Cashflow sequence diagram image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ed48bd06fb1058ff32ae61558b3970bcb25cdbfa","isMergeCommit":false,"messageTitle":"Update sequence","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":8}}},{"hash":"74f6960448f47adae6b4bdbd4dcc1163f72843da","isMergeCommit":false,"messageTitle":"Update class diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ba4027efe30bb026162c36a165a2d18d735282ee","isMergeCommit":false,"messageTitle":"Update UG with add income/expense feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":45,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"7c95abd280fb99cbc170653776856a389685314e","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ae8761b1898e80dc0f6a5754ed181125a251abce","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fb5043a60275972bb89c129cee4e39ce92ea1888","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-UMLforIncomeAndExpense","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"f4b51909654a690c3b2ecb2bd620926dd1326940","isMergeCommit":true,"messageTitle":"Merge pull request #111 from NeoMinWei/Branch-UMLforIncomeAndExpense","messageBody":"UML for income and expense","fileTypesAndContributionMap":{}},{"hash":"15ae6707427c114509ffd3b62294c199b8facb41","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d3ca0986187d0ea6822080bd28e0ac98ab7c0143","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"656d50e12e416b164337282e07aeee816146ad7d","isMergeCommit":false,"messageTitle":"Add description argument","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":13}}},{"hash":"b5acf6d892eec6e5b7ea16ecd331f011408758c0","isMergeCommit":false,"messageTitle":"Update tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":10,"deletions":6}}},{"hash":"96645cb039afa0245efc92e148f14b590b2a9e88","isMergeCommit":false,"messageTitle":"Update storage for cashflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":4}}},{"hash":"4a5cdc73d8b300be5b22d81a4756f7a0aa7b14d2","isMergeCommit":false,"messageTitle":"Add logging for getting description","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"e27031ba253b578571b583d6e6e92634e07a416a","isMergeCommit":false,"messageTitle":"Rename list package to cashflow for clarity","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":36},"other":{"insertions":13,"deletions":13},"test-code":{"insertions":6,"deletions":6}}},{"hash":"54173570879976b60ac2874a428cd6f6b0eb7862","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a0a57fb7be86a7c43635d9e92627f5e496c18819","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-IncomeDescription","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e73f490a7dadf73874a656daa8cb828c2a1b5b30","isMergeCommit":false,"messageTitle":"Refactor code to make it more neat","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":14}}},{"hash":"d7b3cf055cd0887b10ce1eea72c80c3909a8fe93","isMergeCommit":false,"messageTitle":"Add exception when description is empty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"543ea73335c896efae2325529f1f2835c70b1e35","isMergeCommit":true,"messageTitle":"Merge pull request #118 from NeoMinWei/Branch-IncomeDescription","messageBody":"Branch income description","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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"ee85fdd3450c29e6f2fa8ea93bc9d3aa8a7ee4ac","isMergeCommit":false,"messageTitle":"Update error handling for storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":14}}},{"hash":"e33e09d9d6bca826602f6a0a646029f3ff5f69f3","isMergeCommit":false,"messageTitle":"Rename AbstractCommand to Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":18},"other":{"insertions":1,"deletions":1}}},{"hash":"21edafcc87654ea480d1c35ab2ec453623792070","isMergeCommit":false,"messageTitle":"Update singleton and error handling for storage, refactor storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":17},"test-code":{"insertions":6,"deletions":8}}},{"hash":"b4bf06354ec1e651df2c1b0835e8c82c2c4d796b","isMergeCommit":false,"messageTitle":"Add ability to delete, reset and view budget","messageBody":"Fixes #74\n","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":14}}},{"hash":"2ad5082d556bde5cd1dacfa4c3f9abcdf11f49a5","isMergeCommit":false,"messageTitle":"Refactor Budget, fix bug and clean up code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":78}}},{"hash":"f3d525423735d5a193da257d3b598f941e8a3a4b","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":69,"deletions":0}}},{"hash":"ea37034ac84b421b3b6038ea67cc563809a4ba80","isMergeCommit":false,"messageTitle":"Add balance command","messageBody":"Fixes #100\n","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":0}}},{"hash":"4f0d456e878d1f1cab572bcd372c767ddcad1c25","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"7d46886ffb53b08a1cd0ac3da012cf32dad037cd","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-budget","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/investments/WatchList.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"67fddc3c6856207ecdb706ba890e3351cd224e96","isMergeCommit":false,"messageTitle":"Edit FinancialPlanner","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"50e26e9bff8931193e94816246a8442e86620007","isMergeCommit":true,"messageTitle":"Merge pull request #101 from ryan1604/branch-budget","messageBody":"Update budget and clean up code","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"dc34fb4f3597f37652bbf91bb168e07ebfbea8ee","isMergeCommit":false,"messageTitle":"Add sequence diagrams for budgetcommand","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":75,"deletions":0}}},{"hash":"614c03bccff12e4aeb95e9cf908b81db9760f46c","isMergeCommit":false,"messageTitle":"Fix bug in loadBudget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"96fe8e91919e5f59141946ed846c5cd4d3804c43","isMergeCommit":false,"messageTitle":"Add class diagram for storage","messageBody":"Add style.puml from addressbook-level3\n","fileTypesAndContributionMap":{"docs":{"insertions":117,"deletions":0}}},{"hash":"98db3870b2a1642d81b534a75b87f89cbb095ed1","isMergeCommit":false,"messageTitle":"Update DG and diagrams","messageBody":"Fixes #106\n","fileTypesAndContributionMap":{"docs":{"insertions":58,"deletions":4}}},{"hash":"46f08fe1df842f6d9a3e2a66e809e49bc1061e96","isMergeCommit":false,"messageTitle":"Fix error in storage diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"364cd90ab3889d86ba988ddec7c0bccc890e5c48","isMergeCommit":false,"messageTitle":"Change names in diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":9}}},{"hash":"53ec46b8455c109fbca2162f43ea911d5199efb5","isMergeCommit":true,"messageTitle":"Merge pull request #107 from ryan1604/branch-bugfix","messageBody":"Fix bug in loadBudget","fileTypesAndContributionMap":{}},{"hash":"c3b9f2891401df69d30c54d1661cf3c73fa78ce5","isMergeCommit":true,"messageTitle":"Merge pull request #110 from ryan1604/branch-uml","messageBody":"Add diagrams for budgetcommand and storage","fileTypesAndContributionMap":{}},{"hash":"db195afb3523823484f75b050f34047deeb7d5a5","isMergeCommit":false,"messageTitle":"Fix visual in DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":3}}},{"hash":"f3448a2440740014b14b206a8e2d881ca217b47f","isMergeCommit":true,"messageTitle":"Merge pull request #113 from ryan1604/branch-uml","messageBody":"Fix visual in DG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"11b2b150107f908f239f2469ec021ebd049f9a80","isMergeCommit":false,"messageTitle":"Update storage diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":12}}},{"hash":"6d04cb1d2126251eff52ef166980bc558c51f506","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":19}}},{"hash":"2a16939ea19a75e7be88095960d6d869f369ce06","isMergeCommit":false,"messageTitle":"Update overview command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":14}}},{"hash":"2ee59837d6969e00885d562bf8af21898bf7a84f","isMergeCommit":false,"messageTitle":"Extract method in budget command and update DG","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":17},"docs":{"insertions":5,"deletions":5}}},{"hash":"6fa7dc87d5df38ce68d2ee34261b65c9249d5951","isMergeCommit":false,"messageTitle":"Add assertion to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-27","commitResults":[{"hash":"7590b789233a6734bdc9d6c105001eb4a077d540","isMergeCommit":false,"messageTitle":"Add logging to ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"02571fe412b0507a0021ac111ef1371cda6b7d15","isMergeCommit":false,"messageTitle":"Add variables to improve readability","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2}}},{"hash":"c92ed860899ec19d3845231e1c01266fae39553f","isMergeCommit":false,"messageTitle":"Update sequence diagrams","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":12,"deletions":13}}},{"hash":"646af5464658b7ea77bcbefc51057c0b97005830","isMergeCommit":true,"messageTitle":"Merge pull request #114 from ryan1604/branch-overvieww","messageBody":"Update overview command and DG","fileTypesAndContributionMap":{}},{"hash":"412fc190e1de534e10dd256066463d2ea4fe7937","isMergeCommit":false,"messageTitle":"Update JUnit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":97,"deletions":0}}}]},{"date":"2023-10-28","commitResults":[{"hash":"a3fc3c5b0968c530439ef2f345088f3161f70ce7","isMergeCommit":false,"messageTitle":"Update UG and fix minor bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7},"docs":{"insertions":160,"deletions":16}}},{"hash":"261dfa7799f523f1b961c1b70782fe590f570b91","isMergeCommit":false,"messageTitle":"Fix sentence in DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e379b2a147d4ffc4d27cb3f4d955c7a5d4b1c8da","isMergeCommit":true,"messageTitle":"Merge pull request #117 from ryan1604/branch-JUnit","messageBody":"Update JUnit tests","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"715d104667aefc79944d664c609de2f22381a734","isMergeCommit":false,"messageTitle":"Add table of contents to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":1}}},{"hash":"f84cb8f899f63448a08a00588bef6f5b2f5968aa","isMergeCommit":true,"messageTitle":"Merge pull request #119 from ryan1604/branch-UG","messageBody":"Update UG and fix minor bugs","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":258,"functional-code":721,"test-code":44,"other":3},"NeoMinWei":{"docs":117,"functional-code":593,"test-code":131},"ryan1604":{"docs":421,"functional-code":817,"test-code":252,"other":2},"YFshadaow":{"docs":0,"functional-code":294,"test-code":17},"hshiah":{"docs":0,"functional-code":205,"test-code":0}},"authorContributionVariance":{"wwweert123":6826.6763,"NeoMinWei":12832.444,"ryan1604":20606.352,"YFshadaow":7598.486,"hshiah":1004.79504},"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-3_tp_master/authorship.json b/AY2324S1-CS2113-T18-3_tp_master/authorship.json index 7165cde..57f33aa 100644 --- a/AY2324S1-CS2113-T18-3_tp_master/authorship.json +++ b/AY2324S1-CS2113-T18-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":"bljhty"},"content":" implementation group: \u0027com.google.code.gson\u0027, name: \u0027gson\u0027, version: \u00272.10.1\u0027","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"run {","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":5,"-":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":"bljhty"},"content":"--------|:-----------------:|:----------------------------------------:|:---------:","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Cheung Ka Yuen | [Github](https://github.com/KenCheung18) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Lee Jun Hao Bryan | [Github](https://github.com/bljhty) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Lim Yuh Ching | [Github](https://github.com/limyuhching) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-12"},{"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":{"limyuhching":1,"bljhty":2,"KenCheung18":1,"-":5}},{"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":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"### IncomeManager","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"the IncomeManager is facilitated by `IncomeParser`, `IncomeManager`, `IncomeList` and `Ui`.","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"1. The user inputs the command to add income. This input is then passed to `IncomeParser` to be parsed.","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"2. `IncomeParser` then parses the input and returns a `Income` object.","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"3. `IncomeManager` then adds the `Income` object to the `IncomeList`.","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"4. `IncomeManager` then returns a `String` to `Ui` to be printed out to the user.","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"![incomeManager_sequence_diagram.png](..%2Fimages%2FincomeManager_sequence_diagram.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":"### ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":"The ExpenseManager is facilitated by `ExpenseParser`, `ExpenseManager`, `ExpenseList` and `Ui`","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":"1. The user inputs the command to add expense.","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":"2. This command is used to instantiate a ExpenseManager object which is executed.","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":"3. During execution, the command is passed to ExpenseParser which extracts and parses the input fields.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":"4. Input field information is passed to the relevant Expense constructor which returns a Expense object.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":"5. Expense object is returned to ExpenseManager from ExpenseParser.","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":"6. Expense obejct is returned to Duke from ExpenseManager.","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":"![expenseManager_sequence_diagram.png](/Users/apple/Desktop/expenseManager_sequence_diagram.png)","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":"### Find Command","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"The FindCommand is facilitated by `FindCommand`, `FindParser`, `Ui`,`ExpenseList` and `IncomeList`.","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"1. The user will first input the command to find the expense or income.","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":"find /t \u003ctype\u003e /cat [category] /de [description] /date [date]","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"2. The inputs will then be passed to `FindParser` to get the necessary fields such as type, category, description and date.","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"3. The FindCommand is then instantiated with the necessary fields.","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":"4. Users can choose to search through the expense list or income list.","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"5. If users searches through the income list, either the description or date will be used to search through the income list.","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":"6. If users searches through the expense list, either the category or date will be used to search through the expense list.","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"7. The execute method will then be called to search through the list and return the list of expenses or incomes that matches the search criteria.","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"![FindCommand_SequenceDiagram.png](..%2Fimages%2FFindCommand_SequenceDiagram.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"KenCheung18"},"content":"### GetFromTxt Command","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"KenCheung18"},"content":"The GetFromTxt Command is facilitated by `IOException`,`Scanner`, `KaChinnnnngException`, `IncomeList` and `ExpenseList`","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"KenCheung18"},"content":"1. The user start the program and the command will start automatically with a default path","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"KenCheung18"},"content":"2. Once the command executed, it will try to create an txt file on the default path","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"KenCheung18"},"content":"3. If file failed to create, throw an `IOException`","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"KenCheung18"},"content":"4. Catch the `IOExceotion` and print error messages","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":"5. Create a `Scanner` Object s to get content from txt file","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":"6. If amount in txt file exceed limit or incorrect, throw `KaChinnnningException`","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":"7. Read the content on the file and add corresponding object to incomes or expenses list","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":"![FindCommand_SequenceDiagram.png](..%2Fimages%2FGetFromTxt.png)","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":65,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":69,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":71,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":73,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"|---------|----------|------------------------------------|--------------------------------------------------------|","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"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":76,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| add new income entry | track all my incomes |","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| add new expense entry | track all of my expenses |","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| delete income entry | remove incomes that I no longer want to track |","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| delete expense entry | remove expenses that I no longer want to track |","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| list both income and expense entry | view all my expenses and incomes |","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| check my balace | better bugdet my expenditures |","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":84,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":86,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":88,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":90,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":92,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":94,"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":{"bljhty":32,"Hongzhii":13,"KenCheung18":12,"-":37}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"# Hi","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":{"bljhty":1,"-":7}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"# KaChinnnng User Guide","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"welcome to KaChinnnng a personal finance tracker that helps you keep track of your expenses and income.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"2. Download the latest version of `KaChinnnng` from [here](http://link.to/duke).","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"3. Copy the downloaded file to the folder you want to use as the home folder for your KaChinnnng.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"4. open a command terminal and navigate to the folder where you have copied the file to.","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"5. type in the following to run the program","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"java -jar KaChinnnng.jar","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"6. if successful you should see the following output","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":"Welcome to KaChinnnngggg! How may i assist you today?","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"7. type in desired commands and press enter to execute them. (note: commands are not case sensitive)","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"{Give detailed description of each feature}","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"### View help : help","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"Shows basic commands executable by the program.","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":"Format:","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":"help","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"### Add an entry: add","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"Creates a new entry for income or expenses in the program.","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":"Values of income and expense added has to be lower than 1000000.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":"Income and Expense values takes up to 2 decimal places.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"To add an income:","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"add income /description \u003cdescription\u003e /date \u003cdate\u003e /amount \u003camount\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"To add an expense:","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"add expense /catergory \u003ccatergory\u003e /description \u003cdescription\u003e /date \u003cdate\u003e /amount \u003camount\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":"Use case:","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"- Prompts users if any of the fields are empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":"- There are only 3 categories for expenses: `Food`, `Transport`, `Utilities`.","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"- Amount is takes up to 2 decimal places.","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":"- by default, amount is set to SGD.","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":"- format of date is `dd/mm/yyyy`.","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":"- Date needs to be an existing date, and cannot be dates in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":"add income /description salary /date 01/01/2020 /amount 1000","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":"add expense /category Food /description lunch /date 01/01/2020 /amount 10.50","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":"### List all entries: list","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":"Shows a full list of both the expenses and income created by the user.","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":"User can choose to view the list of income/expenses separately as well.","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":"Format:","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"list","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"list income","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":"list expense","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":"### Delete an entry: delete","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":"Deletes an entry from the list of income/expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":"Format:","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":"delete expense \u003cindex\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":"delete income \u003cindex\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":94,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":96,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer? ","lastModifiedDate":"2020-05-24"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":"**A**: {your answer here}","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":100,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":102,"author":{"gitId":"-"},"content":"{Give a \u0027cheat sheet\u0027 of commands here}","lastModifiedDate":"2020-05-24"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":104,"author":{"gitId":"-"},"content":"* Add todo `todo n/TODO_NAME d/DEADLINE`","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"bljhty":78,"-":26}},{"path":"images/expenseManager_sequence_diagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"actor Duke","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"participant ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"participant ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"participant Expense","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"Duke -\u003e ExpenseManager: provides expense details","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"activate ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":"ExpenseManager -\u003e ExpenseParser: extractExpenseFields(details)","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"activate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser -\u003e ExpenseParser: parseDate(expenseDateString)","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"activate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e ExpenseParser: validates date format","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser -\u003e ExpenseParser: parseExpense(argumentsByField)","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e ExpenseParser: validates fields","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e Expense: calls Expense constructor","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":"Expense --\u003e ExpenseParser: new Expense object","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e ExpenseManager: returns Expense object","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":"deactivate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":"ExpenseManager --\u003e Duke: returns new Expense object","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":"deactivate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":"deactivate ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"Hongzhii":23}},{"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":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.Balance;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ClearAll;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ClearExpenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ClearIncomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.DeleteExpenseCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.DeleteIncomeCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.ExpenseLister;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ExpenseManager;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.FindCommand;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.EditExpenseCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.EditIncomeCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.IncomeLister;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.IncomeManager;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.ListCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.UsageInstructions;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.storage.GetFromTxt;","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.storage.SaveToTxt;","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":"import seedu.duke.parser.FindParser;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" * This class is the main class of the program.","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" * It contains the main method that runs the program.","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" private Ui ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":" private String storagePath;","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" private SaveToTxt save;","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" private GetFromTxt get;","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" public Duke() {","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"KenCheung18"},"content":" storagePath \u003d \"KaChinnnngggg.txt\";","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"KenCheung18"},"content":" save \u003d new SaveToTxt(storagePath);","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":" get \u003d new GetFromTxt(storagePath);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" * This method runs the program.","lastModifiedDate":"2023-10-11"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" public void run() {","lastModifiedDate":"2023-10-09"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" Ui.printWelcomeMessage();","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":" get.getFromTextFile(incomes, expenses);","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"\\tOOPS!!! File not found.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-11"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-11"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-10-11"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" String command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" String[] parts \u003d command.split(\"-\", 2);","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" case \"exit\":","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" isExit \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-11"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" case \"add_income\":","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" try{","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" IncomeManager incomeCommand \u003d new IncomeManager(fullCommand);","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" incomeCommand.execute();","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" Income newIncome \u003d incomeCommand.getNewIncome();","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" incomes.add(newIncome);","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" ui.printIncomeAddedMessage(newIncome);","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" case \"list_income\":","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" new IncomeLister(incomes, ui).listIncomes();","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"Hongzhii"},"content":" case \"add_expense\":","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Hongzhii"},"content":" try{","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Hongzhii"},"content":" ExpenseManager expenseCommand \u003d new ExpenseManager(fullCommand);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Hongzhii"},"content":" expenseCommand.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Hongzhii"},"content":" Expense newExpense \u003d expenseCommand.getNewExpense();","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"Hongzhii"},"content":" expenses.add(newExpense);","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"Hongzhii"},"content":" ui.printExpenseAddedMessage(newExpense);","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"Hongzhii"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"Hongzhii"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Hongzhii"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Hongzhii"},"content":" case \"list_expense\":","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Hongzhii"},"content":" new ExpenseLister(expenses, ui).listExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"limyuhching"},"content":" case \"list\":","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"limyuhching"},"content":" new ListCommand(incomes, expenses, ui).execute();","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"limyuhching"},"content":" case \"delete_income\":","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":116,"author":{"gitId":"limyuhching"},"content":" new DeleteIncomeCommand().execute(incomes, fullCommand, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"limyuhching"},"content":" case \"delete_expense\":","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"limyuhching"},"content":" new DeleteExpenseCommand().execute(expenses, fullCommand, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"KenCheung18"},"content":" case \"help\":","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"KenCheung18"},"content":" new UsageInstructions(ui).getHelp();","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"KenCheung18"},"content":" case \"balance\":","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"KenCheung18"},"content":" new Balance(incomes, expenses).getBalanceMessage();","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" case \"find\":","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" String[] parsedParameters \u003d FindParser.parseFindCommand(fullCommand);","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" incomes, expenses,","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" parsedParameters[0], parsedParameters[1],","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" parsedParameters[2], parsedParameters[3], ui);","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"KenCheung18"},"content":" case \"clear_incomes\":","lastModifiedDate":"2023-10-25"},{"lineNumber":150,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":151,"author":{"gitId":"KenCheung18"},"content":" new ClearIncomes(incomes).clearAllIncomes();","lastModifiedDate":"2023-10-25"},{"lineNumber":152,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"KenCheung18"},"content":" case \"clear_expenses\":","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"KenCheung18"},"content":" new ClearExpenses(expenses).clearAllIncomes();","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"KenCheung18"},"content":" case \"clear_all\":","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"KenCheung18"},"content":" new ClearAll(incomes, expenses).clearAllIncomeAndExpense();","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"limyuhching"},"content":" case \"edit_income\":","lastModifiedDate":"2023-10-26"},{"lineNumber":165,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":166,"author":{"gitId":"limyuhching"},"content":" new EditIncomeCommand(incomes, fullCommand).execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":167,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":169,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":170,"author":{"gitId":"limyuhching"},"content":" case \"edit_expense\":","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"limyuhching"},"content":" new EditExpenseCommand(expenses, fullCommand).execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":" default:","lastModifiedDate":"2023-10-11"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Invalid command. Please try again.\");","lastModifiedDate":"2023-10-11"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-11"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-11"},{"lineNumber":182,"author":{"gitId":"limyuhching"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":183,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":185,"author":{"gitId":"KenCheung18"},"content":" save.saveIncomeAndExpense(incomes,expenses);","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" ui.printGoodbyeMessage();","lastModifiedDate":"2023-10-11"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":191,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-09"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" new Duke().run();","lastModifiedDate":"2023-10-11"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":195,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"limyuhching":37,"bljhty":89,"Hongzhii":14,"KenCheung18":46,"-":9}},{"path":"src/main/java/seedu/duke/commands/Balance.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" * The `Balance` class represents a financial balance calculator","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" * that calculates the balance between income and expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" * It takes a list of income and expense records as input and provides methods to calculate and display the balance.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":"public class Balance {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" private final ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" private final ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" public Balance(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" * Calculates the financial balance by subtracting the total expenses from the total income.","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" * @return The calculated financial balance.","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" public double getBalance() {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" double totalIncome \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" double totalExpense \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":" for (Income income : incomes) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" totalIncome +\u003d income.getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":" for (Expense expense : expenses) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" totalExpense +\u003d expense.getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"KenCheung18"},"content":" return totalIncome - totalExpense;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" * Prints a message to the console displaying the calculated financial balance.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"KenCheung18"},"content":" public void getBalanceMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"Balance: \" + getBalance());","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"KenCheung18":45}},{"path":"src/main/java/seedu/duke/commands/ClearAll.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"public class ClearAll {","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":" public ClearAll(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" public void clearAllIncomeAndExpense(){","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" incomes.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" expenses.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"Both income and expense list cleared\");","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":24}},{"path":"src/main/java/seedu/duke/commands/ClearExpenses.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"public class ClearExpenses {","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" public ClearExpenses(ArrayList\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" public void clearAllIncomes(){","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":" expenses.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"You have cleared the expense list\");","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":16}},{"path":"src/main/java/seedu/duke/commands/ClearIncomes.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"public class ClearIncomes {","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" public ClearIncomes(ArrayList\u003cIncome\u003e incomes){","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":" public void clearAllIncomes(){","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" incomes.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"You have cleared the income list\");","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":17}},{"path":"src/main/java/seedu/duke/commands/Commands.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":" * Represents the abstract class for all commands.","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":" * This class serves as a blueprint for all specific command classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"public abstract class Commands {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"limyuhching":1,"bljhty":17}},{"path":"src/main/java/seedu/duke/commands/DeleteExpenseCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":" * The `DeleteExpenseCommand` class represents a command to delete an expense record from a list of expenses.","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" * It extends the `Commands` class and is used to manage expense records in the application.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"public class DeleteExpenseCommand extends Commands {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * Constructs a `DeleteExpenseCommand` object. This class does not have any specific constructor logic.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" public DeleteExpenseCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" * Executes the `DeleteExpenseCommand` to remove an expense record from the list of expenses.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" * @param expenses The list of expense records to be modified.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" * @param fullcommand The full command entered by the user, including the index of the expense to be deleted.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is a problem with the command execution, such as missing arguments,","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" * an invalid index, or a non-existent expense record.","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" public void execute(ArrayList\u003cExpense\u003e expenses, String fullcommand, Ui ui) throws KaChinnnngException {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" int index \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullcommand.split(\" \", 3);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" index \u003d Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" Expense removedExpense \u003d expenses.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" expenses.remove(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. This expense record has been deleted:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" System.out.println(removedExpense);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Expense \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"limyuhching":45}},{"path":"src/main/java/seedu/duke/commands/DeleteIncomeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":" * The DeleteIncomeCommand class is responsible for deleting an income record from the list of incomes.","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"public class DeleteIncomeCommand extends Commands {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" * Constructs a DeleteIncomeCommand object.","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" public DeleteIncomeCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" * Executes the DeleteIncomeCommand to remove an income record from the list of incomes.","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" * @param incomes The list of income records to be modified.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" * @param fullcommand The full command entered by the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is a problem with the command execution, such as missing arguments,","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" * invalid index, or a non-existent income record.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" public void execute(ArrayList\u003cIncome\u003e incomes, String fullcommand, Ui ui) throws KaChinnnngException {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" int index \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullcommand.split(\" \", 3);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" index \u003d Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" Income removedIncome \u003d incomes.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" incomes.remove(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. This income record has been deleted:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" System.out.println(removedIncome);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Income \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"limyuhching":45}},{"path":"src/main/java/seedu/duke/commands/EditExpenseCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"public class EditExpenseCommand extends Commands {","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":" ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" int index;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * Constructs an EditExpenseCommand with the specified expense records and full command.","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" * @param expenses The ArrayList of Expense objects containing expense records.","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string entered by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in the command creation, such as missing arguments.","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" public EditExpenseCommand(ArrayList\u003cExpense\u003e expenses, String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" * Executes the edit expense command. It parses the user input, retrieves the new expense information,","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" * updates the expense record, and prints the changes.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in executing the command, such as missing arguments,","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * incorrect index, or if the specified expense record does not exist.","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" @Override","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" assert expenses !\u003d null : \"Incomes ArrayList must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" assert fullCommand !\u003d null : \"Full command string must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" index \u003d getIndex(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" ExpenseManager expenseCommand \u003d new ExpenseManager(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" expenseCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" Expense newExpense \u003d expenseCommand.getNewExpense();","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" Expense removedExpense \u003d expenses.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" expenses.set(index, newExpense);","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. The expense record you\u0027ve specified has been changed:\");","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Before: \" + removedExpense);","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"After: \" + newExpense);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Expense \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" * Extracts and returns the index from the full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" * @return The index of the income record to be edited.","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in extracting the index, such as missing arguments","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" * or if the index is not a valid integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" private int getIndex(String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullCommand.split(\" \", 4);","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" assert tokens.length \u003e\u003d 4 : \"Command must have at least 4 tokens\";","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" return Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":71}},{"path":"src/main/java/seedu/duke/commands/EditIncomeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"public class EditIncomeCommand extends Commands {","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" int index;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" * Constructs an EditIncomeCommand with the specified income records and full command.","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" * @param incomes The ArrayList of Income objects containing income records.","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string entered by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" public EditIncomeCommand(ArrayList\u003cIncome\u003e incomes, String fullCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" * Executes the edit income command. It parses the user input, retrieves the new income information,","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" * updates the income record, and prints the changes.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in executing the command, such as missing arguments,","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" * incorrect index, or if the specified income record does not exist.","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" @Override","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" assert incomes !\u003d null : \"Incomes ArrayList must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" assert fullCommand !\u003d null : \"Full command string must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" index \u003d getIndex(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" IncomeManager incomeCommand \u003d new IncomeManager(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" incomeCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" Income newIncome \u003d incomeCommand.getNewIncome();","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" Income removedIncome \u003d incomes.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" incomes.set(index, newIncome);","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. The income record you\u0027ve specified has been changed:\");","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Before: \" + removedIncome);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"After: \" + newIncome);","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Income \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" * Extracts and returns the index from the full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" * @return The index of the income record to be edited.","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in extracting the index, such as missing arguments","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" * or if the index is not a valid integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" private int getIndex(String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullCommand.split(\" \", 4);","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" assert tokens.length \u003e\u003d 4 : \"Command must have at least 4 tokens\";","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" return Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":72}},{"path":"src/main/java/seedu/duke/commands/ExpenseLister.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Represents the command that when executed, lists all expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * This class is a child class of the Command class.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"public class ExpenseLister extends Commands {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":" private final ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * Constructor for ExpenseLister.","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param expenses","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param ui","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" public ExpenseLister(ArrayList\u003cExpense\u003e expenses, Ui ui) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" listExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" * This method lists all incomes.","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" public void listExpenses() {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" if (expenses.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"You have no recorded expenses.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"Here are your expenses:\");","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":" for (int i \u003d 0; i \u003c expenses.size(); i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Hongzhii"},"content":" System.out.println((i + 1) + \". \" + expenses.get(i).toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":53}},{"path":"src/main/java/seedu/duke/commands/ExpenseManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.parser.ExpenseParser;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * This is the class that manages the creation of new expense","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class ExpenseManager extends Commands{","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private final String details;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":" private Expense newExpense;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" public ExpenseManager(String details) {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" this.details \u003d details;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * This method is used to execute the command","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d extractExpenseFields(details);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" newExpense \u003d ExpenseParser.parseExpense(expenseFields);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * This method returns new expense created","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" public Expense getNewExpense() {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" return newExpense;","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" * This method extracts the fields of the expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" * @param details String containing the details of the expense","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" * @return expenseFields HashMap containing the fields of the income","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" private HashMap\u003cString, String\u003e extractExpenseFields(String details) throws KaChinnnngException{","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" HashMap\u003cString,String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Hongzhii"},"content":" String[] parts \u003d details.split(\"/cat | /type | /de | /date | /amt \");","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Hongzhii"},"content":" if(parts.length !\u003d 6) {","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Missing fields detected\");","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, parts[1].trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, parts[2].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, parts[3].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, parts[4].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, parts[5].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Hongzhii"},"content":" return expenseFields;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":62}},{"path":"src/main/java/seedu/duke/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.time.Month;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.Year;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.format.TextStyle;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * Represents a command to find and display financial records (either incomes or expenses) based on specific criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" * The criteria include type (income/expense), category, description, and date.","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" * This command supports searching by a specific date or by a month. If a date isn\u0027t provided, it will not be used","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" * as a filter. Similarly, if the category or description isn\u0027t provided, they won\u0027t be used as filters.","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"public class FindCommand extends Commands {","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" private final ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" private final ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" private final String type;","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" private final String category;","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" private final String description;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" private final LocalDate date;","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" private boolean isSearchByMonth \u003d false;","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" if(!dir.mkdirs()) {","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/FindCommand.log\", true);","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" * Constructs a new FindCommand with the given criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" * @param incomes The list of incomes to search from.","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" * @param expenses The list of expenses to search from.","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" * @param type The type of financial record to search for (either \"income\" or \"expense\").","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" * @param category The category to filter the results by.","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" * @param description The description to filter the results by.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" * @param dateString The date (or month) to filter the results by. Expected format: dd/MMM/yyyy.","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" * @param ui The UI component to display results.","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If an invalid type is provided or if there\u0027s an error parsing the date.","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" public FindCommand(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses, String type,","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" String category, String description, String dateString, Ui ui) throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" if (!type.equalsIgnoreCase(\"income\") \u0026\u0026 !type.equalsIgnoreCase(\"expense\")) {","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Invalid type. Please use \u0027income\u0027 or \u0027expense\u0027.\");","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" this.date \u003d parseDate(dateString); // Convert date string to LocalDate","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, String.format(\"FindCommand initialised with type: %s\", type));","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" * Executes the find command. Searches through the provided list of incomes or expenses and displays","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" * matching results based on the given criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If there\u0027s an error during execution, such as an invalid type.","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" LOGGER.info(\"Executing FindCommand\");","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" assert incomes !\u003d null : \"incomes should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" assert expenses !\u003d null : \"expenses should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cExpense\u003e matchingExpenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cIncome\u003e matchingIncomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" if (\"expense\".equalsIgnoreCase(type)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" for (Expense e : expenses) {","lastModifiedDate":"2023-10-23"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" if (matchesCriteria(e)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" matchingExpenses.add(e);","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO,String.format(\"Found %d matching expenses\", matchingExpenses.size()));","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" ui.showMatchingExpenses(matchingExpenses); // Assuming you have such a method in Ui","lastModifiedDate":"2023-10-23"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" } else if (\"income\".equalsIgnoreCase(type)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" for (Income i : incomes) {","lastModifiedDate":"2023-10-23"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" if (matchesCriteria(i)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" matchingIncomes.add(i);","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO,String.format(\"Found %d matching incomes\", matchingIncomes.size()));","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" ui.showMatchingIncomes(matchingIncomes); // Assuming you have such a method in Ui","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-24"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid type: \" + type);","lastModifiedDate":"2023-10-24"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" * Determines if a given date matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" * @param dateToCheck The date to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" * @return True if the date matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" private boolean matchesDate(LocalDate dateToCheck) {","lastModifiedDate":"2023-10-24"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" if (this.date !\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" if (isSearchByMonth) {","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" return dateToCheck.getMonthValue() \u003d\u003d this.date.getMonthValue();","lastModifiedDate":"2023-10-24"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" return dateToCheck.isEqual(this.date);","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" return true; // If this.date is null, then any date matches the criteria","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" * Determines if a given category matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" * @param categoryToCheck The category to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" * @return True if the category matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" private boolean matchesCategory(String categoryToCheck) {","lastModifiedDate":"2023-10-24"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" return this.category \u003d\u003d null || (categoryToCheck !\u003d null \u0026\u0026 categoryToCheck.equalsIgnoreCase(this.category));","lastModifiedDate":"2023-10-24"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":" * Determines if a given description matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":" * The description matches if it contains all the keywords specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" * If no description is specified in the command, then any description matches the criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" * @param descriptionToCheck The description to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":" * @return True if the description matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" private boolean matchesDescription(String descriptionToCheck) {","lastModifiedDate":"2023-10-24"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":" if (this.description !\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":" String[] keywords \u003d this.description.split(\"\\\\s+\");","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":" for (String keyword : keywords) {","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" if (!descriptionToCheck.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-10-24"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":" return false;","lastModifiedDate":"2023-10-24"},{"lineNumber":168,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":169,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":170,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"bljhty"},"content":" return true;","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":173,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":174,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":" * Determines if a given expense matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" * @param e The expense to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" * @return True if the expense matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":" private boolean matchesCriteria(Expense e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" return matchesDate(e.getDate()) \u0026\u0026 matchesCategory(e.getCategory()) \u0026\u0026 matchesDescription(e.getDescription());","lastModifiedDate":"2023-10-24"},{"lineNumber":182,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":183,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":185,"author":{"gitId":"bljhty"},"content":" * Determines if a given income matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" * @param i The income to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":" * @return True if the income matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":" private boolean matchesCriteria(Income i) {","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"bljhty"},"content":" return matchesDate(i.getDate()) \u0026\u0026 matchesCategory(i.getCategory()) \u0026\u0026 matchesDescription(i.getDescription());","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":193,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":195,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"bljhty"},"content":" * Converts a date string into a LocalDate object. Supports full date strings and month names.","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"bljhty"},"content":" * @param dateString Date as a string in the format dd/MMM/yyyy or as a month name.","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"bljhty"},"content":" * @return LocalDate representation of the provided dateString.","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If the date string is in an invalid format.","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"bljhty"},"content":" private LocalDate parseDate(String dateString) throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":203,"author":{"gitId":"bljhty"},"content":" if (dateString \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":204,"author":{"gitId":"bljhty"},"content":" return null;","lastModifiedDate":"2023-10-23"},{"lineNumber":205,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":206,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\");","lastModifiedDate":"2023-10-23"},{"lineNumber":207,"author":{"gitId":"bljhty"},"content":" LocalDate parsedDate \u003d null;","lastModifiedDate":"2023-10-24"},{"lineNumber":208,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":209,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":210,"author":{"gitId":"bljhty"},"content":" parsedDate \u003d LocalDate.parse(dateString, formatter);","lastModifiedDate":"2023-10-24"},{"lineNumber":211,"author":{"gitId":"bljhty"},"content":" return parsedDate;","lastModifiedDate":"2023-10-24"},{"lineNumber":212,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":213,"author":{"gitId":"bljhty"},"content":" // Check if dateString is just a month","lastModifiedDate":"2023-10-23"},{"lineNumber":214,"author":{"gitId":"bljhty"},"content":" for (Month month : Month.values()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":215,"author":{"gitId":"bljhty"},"content":" if (month.getDisplayName(TextStyle.SHORT, Locale.ENGLISH).equalsIgnoreCase(dateString)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":216,"author":{"gitId":"bljhty"},"content":" isSearchByMonth \u003d true;","lastModifiedDate":"2023-10-23"},{"lineNumber":217,"author":{"gitId":"bljhty"},"content":" parsedDate \u003d LocalDate.of(Year.now().getValue(), month, 1);","lastModifiedDate":"2023-10-24"},{"lineNumber":218,"author":{"gitId":"bljhty"},"content":" assert parsedDate.getMonth() \u003d\u003d month : \"parsedDate month should be \" + month;","lastModifiedDate":"2023-10-24"},{"lineNumber":219,"author":{"gitId":"bljhty"},"content":" return parsedDate;","lastModifiedDate":"2023-10-24"},{"lineNumber":220,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":221,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":222,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"failed to parse date\" + dateString);","lastModifiedDate":"2023-10-24"},{"lineNumber":223,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Invalid date format. Please use format like 20/Oct/2023.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":224,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":225,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":226,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-23"},{"lineNumber":227,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"bljhty":227}},{"path":"src/main/java/seedu/duke/commands/IncomeLister.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * Represents the command that when executed, lists all incomes.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * This class is a child class of the Command class.","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public class IncomeLister extends Commands {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(IncomeLister.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" private final ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" * Constructor for IncomeLister.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * @param incomes ArrayList of incomes","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" * @param ui Instance of Ui","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" public IncomeLister(ArrayList\u003cIncome\u003e incomes, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" assert incomes !\u003d null : \"incomes should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" assert ui !\u003d null : \"ui should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, (\"Initialised IncomeLister\"));","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" listIncomes();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" * This method lists all incomes.","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" // Updated method name to follow Java naming conventions","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" public void listIncomes() {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" if (incomes.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" System.out.println(\"You have no recorded incomes.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are your incomes:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" for (int i \u003d 0; i \u003c incomes.size(); i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" System.out.println((i + 1) + \". \" + incomes.get(i).toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, (\"Incomes listed successfully\"));","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":64}},{"path":"src/main/java/seedu/duke/commands/IncomeManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.parser.IncomeParser;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * Represents the class that manages the creation of a new income.","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" * This class serves as a blueprint for all specific income creation classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"public class IncomeManager extends Commands{","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" // Logger instance to log events and issues that occur during the execution of this class.","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(IncomeManager.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" private final String details;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" private Income newIncome;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" static{","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/IncomeManager.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" public IncomeManager(String details) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" assert details !\u003d null : \"details should not be null\"; // Ensure that details is not null","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" this.details \u003d details;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d extractIncomeFields(details);","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" newIncome \u003d IncomeParser.parseIncome(incomeFields);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, \"successful parsing of income\"); // logging successful parsing of income","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" * This method returns the new income created.","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" * @return newIncome","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" public Income getNewIncome() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" return newIncome;","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" * This method extracts the fields of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" * @param details String containing the details of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" * @return incomeFields HashMap containing the fields of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" private HashMap\u003cString, String\u003e extractIncomeFields(String details) throws KaChinnnngException {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" assert details !\u003d null : \"details should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" // Split the details string based on the field keywords","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" String[] parts \u003d details.split(\"/de|/date|/amt\");","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" // Check if all fields are present in the string","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" if (parts.length !\u003d 4) {","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Missing or out-of-order fields detected in income details: \" + details);","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Expected fields `/description`, `/date`, and \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" \"`/amount` are missing or improperly formatted.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" // Populate the HashMap with extracted fields","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, parts[1].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, parts[2].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, parts[3].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" return incomeFields;","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":97}},{"path":"src/main/java/seedu/duke/commands/KaChinnnngException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":" * Represents the exception thrown when there is an error in the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"public class KaChinnnngException extends Exception{","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":" public KaChinnnngException(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":" super(message);","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":10}},{"path":"src/main/java/seedu/duke/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" * The `ListCommand` class is responsible for displaying a list of income and expense records,","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" * along with the total income, total expenses, and the total balance.","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":" * It extends the `Commands` class and is used to provide a summary of financial records to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"public class ListCommand extends Commands {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" private Ui ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" private double totalIncome;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" private double totalExpenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" * Constructs a `ListCommand` object with the specified income and expense lists and a user interface.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" * @param incomes The list of income records to be displayed.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" * @param expenses The list of expense records to be displayed.","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" * @param ui The user interface for displaying messages and financial records.","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" public ListCommand(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses, Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" totalIncome \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" totalExpenses \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" * Executes the `ListCommand` to display a summary of income and expense records,","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" * along with the total balance.","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" public void execute() {","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" if (incomes.isEmpty() \u0026\u0026 expenses.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"You do not have any records.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" // Print incomes","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" if (incomes.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"You have no recorded incomes.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Here are your incomes:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" for (int i \u003d 0; i \u003c incomes.size(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" System.out.println((i + 1) + \". \" + incomes.get(i).toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" totalIncome +\u003d incomes.get(i).getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" System.out.printf(\"Total income is: $%.2f.\\n\", totalIncome);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" // Print expenses","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" if (expenses.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"You have no recorded expenses.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Here are your expenses:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" for (int i \u003d 0; i \u003c expenses.size(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" System.out.println((i + 1) + \". \" + expenses.get(i).toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" totalExpenses +\u003d expenses.get(i).getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" System.out.printf(\"Total expenses is: $%.2f.\\n\", totalExpenses);","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" System.out.printf(\"\\nTotal balance is: $%.2f.\\n\", totalIncome - totalExpenses);","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"limyuhching":73}},{"path":"src/main/java/seedu/duke/commands/UsageInstructions.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"public class UsageInstructions {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":" // Shows a message linking the user to the user guide of our app","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":" private final seedu.duke.ui.Ui ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" * The `UsageInstructions` class provides usage instructions for the application,","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" * including command formats and a link to the user guide.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" public UsageInstructions(Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" * Displays usage instructions for the application, including command formats and a link to the user guide.","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" public void getHelp(){","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" // Shows a message linking the user to the user guide of our app","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" System.out.println(\"You can access our user guide by \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" \"https://docs.google.com/document/d/1BOz_v4eYQ8y7Dje6Jm6nqymi9jmrsb9MAohLCL_sLvI/edit?usp\u003dsharing\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" // Displays the various commands that user can use including the respective formats of the commands","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Functions and their format:\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Adding an entry: add\\nFormat:\\n\" + \"Add expense /category /description /value\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" \"Add income /description /value\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Listing all entries: list\\nFormat:\\n\" + \"list\\n\" + \"list income\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" \"list expense\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Deleting an entry: delete\\nFormat:\\ndelete income [index_pos]\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" \"delete expense [index_pos]\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Check balance of income: balance\\nFormat:\\n\" + \"balance\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Exiting the program: exit\\nFormat:\\n\" + \"exit\");","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":30,"KenCheung18":7}},{"path":"src/main/java/seedu/duke/financialrecords/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":" * Implementation of the Expense class","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":" * Basic expense class inherits from FinancialRecord and does not include any additional attributes","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Attribute \"amount\" contains a negative double which will make it easier to tally up the net total at the end","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"public class Expense extends FinancialRecord {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" protected String category;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" public Expense(String description, LocalDate date, double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" public String getCategory() {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" return \"Expense: \" + getDescription() +","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":7,"Hongzhii":20}},{"path":"src/main/java/seedu/duke/financialrecords/FinancialRecord.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * Represents the abstract class for all financial records.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * This class serves as a blueprint for all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public abstract class FinancialRecord{","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" // Logger instance to log events and issues that occur during the execution of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FinancialRecord.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" protected String description;","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" protected LocalDate date;","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" protected double amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" * This method is used to create a new financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record creation classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" * @param description String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" * @param date LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" * @param amount double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" public FinancialRecord(String description, LocalDate date, double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" assert description !\u003d null : \"description should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" assert date !\u003d null : \"date should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" LOGGER.warning(\"Description is empty\");","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Description cannot be empty!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" if (amount \u003c 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" LOGGER.warning(\"Amount is negative\");","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Amount cannot be negative!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" if (date.isAfter(LocalDate.now())) {","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" LOGGER.warning(\"Date is in the future\");","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Date cannot be in the future!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" * This method is used to get the category of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" * @return String containing the category of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" public String getCategory() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" return \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" * This method is used to get the description of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" * @return String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" return description;","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * This method is used to get the date of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" * @return LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" public LocalDate getDate() {","lastModifiedDate":"2023-10-12"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" return date;","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" * This method is used to get the date of the financial record in a string format.","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" * @return String containing the date of the financial record in a string format","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" public String getDateString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\");","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" return date.format(formatter);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" * This method is used to get the amount of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" * @return double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" public double getAmount() {","lastModifiedDate":"2023-10-12"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" return amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" * This method is used to set the description of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" * @param description String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" public void setDescription(String description) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" assert description !\u003d null : \"description should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Description cannot be empty!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-12"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" * This method is used to set the date of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" * @param date LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":" public void setDate(LocalDate date) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" assert date !\u003d null : \"date should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-12"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" * This method is used to set the amount of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" * @param amount double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" public void setAmount(double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" assert amount \u003e\u003d 0 : \"amount should not be negative\";","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" * This method is used to get the category of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" * @return String containing the category of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" return \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":152}},{"path":"src/main/java/seedu/duke/financialrecords/Food.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Food class that inherits from expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * Represents food expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class Food extends Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private MealType mealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" * Food class constructor","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * @param description","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" * @param date","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param amount","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param mealType","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public Food(String description, LocalDate date, double amount, MealType mealType) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" this.category \u003d \"food\";","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" this.mealType \u003d mealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" * Returns meal type","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" public MealType getMealType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" return mealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" * Returns a string that contains all the information on the expense record","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" return \"Food Expense (\" + getMealType() + \"): \" + getDescription() +","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"bljhty":1,"Hongzhii":45}},{"path":"src/main/java/seedu/duke/financialrecords/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * Implementation of the Income class","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * Basic income class inherits from FinancialRecord and does not include any additional attributes","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public class Income extends FinancialRecord {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" // Logger instance to log events and issues that occur during the execution of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(Income.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/Income.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * This method is used to create a new financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record creation classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" * @param description String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" * @param date LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" * @param amount double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" public Income(String description, LocalDate date, double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO,(\"Income created with description: \" +","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" description + \" date: \" + date + \" amount: \" + amount));","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" * This method is used to get the category of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" * @return String containing the category of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" return \"Income: \" + getDescription() + ","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" \" | Date: \" + getDateString()+ \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":64}},{"path":"src/main/java/seedu/duke/financialrecords/Transport.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Transport class that inherits from expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * Represents transportation expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class Transport extends Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private TransportationType transportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" * Transport class constructor","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * @param description","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" * @param date","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param amount","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param transportationType","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public Transport(String description, LocalDate date, double amount,","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" TransportationType transportationType) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" this.transportationType \u003d transportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" * Returns transportation type","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" public TransportationType getTransportationType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" return transportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" * Returns a string that contains all the information on the expense record","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" return \"Transportation Expense (\" + getTransportationType() + \"): \" + getDescription() +","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":46}},{"path":"src/main/java/seedu/duke/financialrecords/Utilities.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Utilities class that inherits from expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * Represents utility expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class Utilities extends Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private UtilityType utilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" * Utilities class constructor","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * @param description","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" * @param date","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param amount","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param utilityType","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public Utilities(String description, LocalDate date, double amount,","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" UtilityType utilityType) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" this.utilityType \u003d utilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" * Returns utility type","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" public UtilityType getUtilityType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" return utilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" * Returns a string that contains all the information on the expense record","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" return \"Utilities Expense(\" + getUtilityType() + \"): \" + getDescription() +","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":46}},{"path":"src/main/java/seedu/duke/financialrecords/expensetypes/MealType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords.expensetypes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Enum class to represent meal types.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"public enum MealType {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":" UNDEFINED, BREAKFAST, LUNCH, DINNER","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":8}},{"path":"src/main/java/seedu/duke/financialrecords/expensetypes/TransportationType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords.expensetypes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Enum class that represents all transportation types.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"public enum TransportationType {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":" UNDEFINED, TRAIN, BUS, TAXI, FUEL","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":8}},{"path":"src/main/java/seedu/duke/financialrecords/expensetypes/UtilityType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords.expensetypes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Enum class that represents all utility types.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"public enum UtilityType {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":" UNDEFINED, WATER, ELECTRICITY, GAS","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":8}},{"path":"src/main/java/seedu/duke/parser/ExpenseParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":"import java.time.format.ResolverStyle;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":"public class ExpenseParser {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" public static final String CATEGORY_FIELD \u003d \"ca\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" public static final String TYPE_FIELD \u003d \"ty\";","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" public static final String DESCRIPTION_FIELD \u003d \"de\";","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" public static final String DATE_FIELD \u003d \"da\";","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public static final String AMOUNT_FIELD \u003d \"am\";","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" public static final String INDEX_FIELD \u003d \"in\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" public static LocalDate parseDate(String expenseDateString) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" LocalDate expenseDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/uuuu\")","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" .withResolverStyle(ResolverStyle.STRICT);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" expenseDate \u003d LocalDate.parse(expenseDateString, formatter);","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a valid date in the format dd/MM/yyyy\");","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" if (expenseDate.isAfter(LocalDate.now())) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a date that is not in the future\");","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" return expenseDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" public static Expense parseExpense(HashMap\u003cString, String\u003e argumentsByField) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" if (!argumentsByField.containsKey(CATEGORY_FIELD) ||","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(TYPE_FIELD) ||","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(DESCRIPTION_FIELD) ||","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(DATE_FIELD) ||","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(AMOUNT_FIELD)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Missing fields detected\");","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Hongzhii"},"content":" String expenseCategoryString \u003d argumentsByField.get(CATEGORY_FIELD).toLowerCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Hongzhii"},"content":" String expenseTypeString \u003d argumentsByField.get(TYPE_FIELD).toLowerCase();","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Hongzhii"},"content":" String expenseDescriptionString \u003d argumentsByField.get(DESCRIPTION_FIELD);","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Hongzhii"},"content":" String expenseDateString \u003d argumentsByField.get(DATE_FIELD);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Hongzhii"},"content":" String expenseAmountString \u003d argumentsByField.get(AMOUNT_FIELD);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Hongzhii"},"content":" LocalDate expenseDate \u003d parseDate(expenseDateString);","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Hongzhii"},"content":" double expenseAmount;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Hongzhii"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Hongzhii"},"content":" expenseAmount \u003d Double.parseDouble(expenseAmountString);","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Hongzhii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a valid amount\");","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Hongzhii"},"content":" if (expenseAmount \u003e 999999.99 || expenseAmount \u003c\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Expense amount must be between $0.01 and $999999.99\");","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Hongzhii"},"content":" if (expenseCategoryString.equals(\"food\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Hongzhii"},"content":" if (expenseTypeString.equals(\"breakfast\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.BREAKFAST);","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"lunch\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.LUNCH);","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"dinner\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.DINNER);","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"Hongzhii"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.UNDEFINED);","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseCategoryString.equals(\"transport\")){","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Hongzhii"},"content":" if (expenseTypeString.equals(\"train\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"Hongzhii"},"content":" TransportationType.TRAIN);","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"bus\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"Hongzhii"},"content":" TransportationType.BUS);","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"taxi\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"Hongzhii"},"content":" TransportationType.TAXI);","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"fuel\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"Hongzhii"},"content":" TransportationType.FUEL);","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"Hongzhii"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"Hongzhii"},"content":" TransportationType.UNDEFINED);","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" } else if (expenseCategoryString.equals(\"utilities\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"Hongzhii"},"content":" if (expenseTypeString.equals(\"water\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.WATER);","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"electricity\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.ELECTRICITY);","lastModifiedDate":"2023-10-26"},{"lineNumber":100,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"gas\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.GAS);","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"Hongzhii"},"content":" } else{","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.UNDEFINED);","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid category\");","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Hongzhii"},"content":" public static int getIndex(HashMap\u003cString, String\u003e argumentsByFields) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Hongzhii"},"content":" if (!argumentsByFields.containsKey(INDEX_FIELD)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Missing index field detected\");","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Hongzhii"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Hongzhii"},"content":" return Integer.parseInt(argumentsByFields.get(INDEX_FIELD));","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Hongzhii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a valid index\");","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"bljhty":3,"Hongzhii":117}},{"path":"src/main/java/seedu/duke/parser/FindParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"public class FindParser {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" * Parses the find command input.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * @param fullCommand The full command string input by the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * @return An array of Strings containing the parsed parameters in the order: TYPE, CATEGORY, DESCRIPTION, DATE.","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If the command format is invalid.","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public static String[] parseFindCommand(String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" String[] tokens \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" String[] parsedParameters \u003d new String[4]; // To store TYPE, CATEGORY, DESCRIPTION, DATE","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" String[] validParameters \u003d {\"/t\", \"/cat\", \"/de\", \"/date\"}; // List of valid parameters","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" for (String token : tokens) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" if (token.startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" boolean isValidParam \u003d false;","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" for (String validParam : validParameters) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" if (token.equals(validParam)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" isValidParam \u003d true;","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" if (!isValidParam) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Unrecognized parameter \\\"\" + token + \"\\\". \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" \"Please refer to the help guide for valid parameters.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/type\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please use /t instead of /type for specifying the type.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/category\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please use /cat instead of /category for specifying the category.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/description\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please use /de instead of /description for specifying the description.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" if (!fullCommand.contains(\"/t\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The /t TYPE field is mandatory.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" int typeIndex \u003d indexOf(tokens, \"/t\");","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" if (typeIndex \u003d\u003d tokens.length - 1 || tokens[typeIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /t TYPE cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" parsedParameters[0] \u003d tokens[typeIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" if(\"income\".equalsIgnoreCase(parsedParameters[0])) {","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/cat\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The /cat CATEGORY field is not applicable for income.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/cat\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" int categoryIndex \u003d indexOf(tokens, \"/cat\");","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" if (categoryIndex \u003d\u003d tokens.length - 1 || tokens[categoryIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /c CATEGORY cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" parsedParameters[1] \u003d tokens[categoryIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/de\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" int descriptionIndex \u003d indexOf(tokens, \"/de\");","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" if (descriptionIndex \u003d\u003d tokens.length - 1 || tokens[descriptionIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /de DESCRIPTION cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" parsedParameters[2] \u003d tokens[descriptionIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/date\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" int dateIndex \u003d indexOf(tokens, \"/date\");","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" if (dateIndex \u003d\u003d tokens.length - 1 || tokens[dateIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /da DATE cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" parsedParameters[3] \u003d tokens[dateIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" // Check that at least one optional field is provided","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" if (parsedParameters[1] \u003d\u003d null \u0026\u0026 parsedParameters[2] \u003d\u003d null \u0026\u0026 parsedParameters[3] \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"At least one of the optional fields [/c CATEGORY], \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" \"[/de DESCRIPTION], [/da DATE] must be provided.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" return parsedParameters;","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" * Helper method to find the index of a specific string in an array.","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" * @param array The array to search.","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" * @param value The string value to find.","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" * @return The index of the value in the array, or -1 if not found.","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" private static int indexOf(String[] array, String value) {","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" for (int i \u003d 0; i \u003c array.length; i++) {","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" if (array[i].equals(value)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" return i;","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" return -1;","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"bljhty":108}},{"path":"src/main/java/seedu/duke/parser/IncomeParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.time.format.ResolverStyle;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" * Represents the parser for the Income class.","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" * This class serves to parse the user input into a format that the Income class can understand","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"public class IncomeParser {","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" public static final String DESCRIPTION_FIELD \u003d \"de\";","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" public static final String DATE_FIELD \u003d \"da\";","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" public static final String AMOUNT_FIELD \u003d \"am\";","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" public static final String INDEX_FIELD \u003d \"in\";","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(IncomeParser.class.getName());","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/IncomeParser.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" * This method is used to parse the date of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeParser class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeManager class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" * @param incomeDateString String containing the date of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" * @return incomeDate LocalDate containing the date of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" public static LocalDate parseDate(String incomeDateString) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" assert incomeDateString !\u003d null : \"incomeDateString should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" LocalDate incomeDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/uuuu\")","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" .withResolverStyle(ResolverStyle.STRICT);","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" incomeDate \u003d LocalDate.parse(incomeDateString, formatter);","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid date format\" + incomeDateString, e);","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid date in the format dd/MM/yyyy\");","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" if (incomeDate.isAfter(LocalDate.now())) {","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Date is in the future\" + incomeDateString);","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a date that is not in the future\");","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" return incomeDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" * This method is used to parse the fields of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeManager class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" * @param argumentsByField HashMap containing the description, date, and amount of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" * @return Income object created from the provided fields","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" public static Income parseIncome(HashMap\u003cString, String\u003e argumentsByField) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" if (!argumentsByField.containsKey(DESCRIPTION_FIELD) ||","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" !argumentsByField.containsKey(DATE_FIELD) ||","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" !argumentsByField.containsKey(AMOUNT_FIELD)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Missing fields detected\");","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" String incomeDescriptionString \u003d argumentsByField.get(DESCRIPTION_FIELD);","lastModifiedDate":"2023-10-12"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" String incomeDateString \u003d argumentsByField.get(DATE_FIELD);","lastModifiedDate":"2023-10-12"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" String incomeAmountString \u003d argumentsByField.get(AMOUNT_FIELD);","lastModifiedDate":"2023-10-12"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" LocalDate incomeDate \u003d parseDate(incomeDateString);","lastModifiedDate":"2023-10-12"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" double incomeAmount;","lastModifiedDate":"2023-10-12"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" incomeAmount \u003d Double.parseDouble(incomeAmountString);","lastModifiedDate":"2023-10-12"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid amount format\" + incomeAmountString, e);","lastModifiedDate":"2023-10-19"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid amount\");","lastModifiedDate":"2023-10-12"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" if (incomeAmount \u003e 999999.99 || incomeAmount \u003c\u003d 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid amount\" + incomeAmountString);","lastModifiedDate":"2023-10-19"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Income amount must be between $0.01 and $999999.99\");","lastModifiedDate":"2023-10-12"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" return new Income(incomeDescriptionString, incomeDate, incomeAmount);","lastModifiedDate":"2023-10-12"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" * This method is used to get the index of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeDeleter class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" * @param argumentsByFields HashMap containing the index of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" * @return index int containing the index of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" public static int getIndex(HashMap\u003cString, String\u003e argumentsByFields) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" assert argumentsByFields !\u003d null : \"argumentsByFields should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" if (!argumentsByFields.containsKey(INDEX_FIELD)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Missing index field detected\");","lastModifiedDate":"2023-10-12"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" int index;","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" index \u003d Integer.parseInt(argumentsByFields.get(INDEX_FIELD));","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid index\");","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid index\");","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" return index;","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":138}},{"path":"src/main/java/seedu/duke/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"/*","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * parser class to parse user input","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public class Parser {","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" //private static final Logger LOGGER \u003d Logger.getLogger(Parser.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(Parser.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/Parser.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * This method is used to parse the user input.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This method is used by the Main class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" * @param fullCommand String containing the user input","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" * @return String containing the command to be executed","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" public static String parse(String fullCommand) {","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" assert fullCommand !\u003d null : \"fullCommand should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" String trimmedCommand \u003d fullCommand.trim();","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" String commandLowerCase \u003d trimmedCommand.toLowerCase();","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, (\"Parsing user input:\") + fullCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" String resultCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" if (commandLowerCase.equals(\"exit\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"exit\";","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" } else if (commandLowerCase.startsWith(\"add income\")) {","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"add_income\";","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" } else if (commandLowerCase.equals(\"list income\")) {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"list_income\";","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"Hongzhii"},"content":" } else if (commandLowerCase.startsWith(\"add expense\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"add_expense\";","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"Hongzhii"},"content":" } else if (commandLowerCase.equals((\"list expense\"))) {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"list_expense\";","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.equals(\"help\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"help\";","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.equals(\"list\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"list\";","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"delete income\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"delete_income\";","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"delete expense\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"delete_expense\";","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.equals(\"balance\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"balance\";","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" } else if (commandLowerCase.startsWith(\"find\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"find\";","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.startsWith(\"clear incomes\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"KenCheung18"},"content":" resultCommand \u003d \"clear_incomes\";","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.startsWith(\"clear expenses\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"KenCheung18"},"content":" resultCommand \u003d \"clear_expenses\";","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.startsWith(\"clear all\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"KenCheung18"},"content":" resultCommand \u003d \"clear_all\";","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"edit income\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"limyuhching"},"content":" resultCommand \u003d \"edit_income\";","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"edit expense\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"limyuhching"},"content":" resultCommand \u003d \"edit_expense\";","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"invalid\";","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO , (\"Parsed command: \") + resultCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" return resultCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"limyuhching":7,"bljhty":77,"Hongzhii":2,"KenCheung18":8}},{"path":"src/main/java/seedu/duke/storage/GetFromTxt.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.storage;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"import java.io.File;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":" * The GetFromTxt class is responsible for reading financial records data from a text file.","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" * It parses the contents of the file and populates two ArrayLists: one for Incomes and one for Expenses.","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" * This class handles exceptions for file creation errors, parsing errors, and other issues that may arise","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" * when reading data from the file.","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":"public class GetFromTxt {","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" private static final String AMOUNT_NOT_SUPPORT_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" \"Amount field from this line is not supported from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" private static final String DATE_TIME_FORMAT_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" \"Date time format incorrect on this line from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" private static final String FILE_CREATION_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":" \"Something went wrong while creating the file from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"KenCheung18"},"content":" private static final String INDEX_OUT_OF_BOUND_FROM_FILE_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"KenCheung18"},"content":" \"Details missed on this line from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" private static final String NUMBER_FROM_FILE_INCORRECT \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" \"The expense type is incorrect on this line from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"KenCheung18"},"content":" private final File file;","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"KenCheung18"},"content":" * Construct a new object of the GetFromTxt class with the provided file path.","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"KenCheung18"},"content":" * @param path The path to the text file containing financial records data.","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"KenCheung18"},"content":" public GetFromTxt(String path) {","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"KenCheung18"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"KenCheung18"},"content":" * Reads financial records data from the text file and add to the corresponding ArrayLists","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":" * with Income and Expense objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The ArrayList to store Income objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The ArrayList to store Expense objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":" * @throws FileNotFoundException If the file specified by the path cannot be found.","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"KenCheung18"},"content":" public void getFromTextFile(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses) throws FileNotFoundException {","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"KenCheung18"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"KenCheung18"},"content":" return; // If there is no such file in the directory, create the file and return without reading data.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"KenCheung18"},"content":" System.out.println(FILE_CREATION_ERROR);","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"KenCheung18"},"content":" Scanner s \u003d new Scanner(file); // Create a Scanner using the File as the source","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"KenCheung18"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"KenCheung18"},"content":" String textLine \u003d s.nextLine();","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"KenCheung18"},"content":" // Parse the data from the text line","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"KenCheung18"},"content":" int expenseType \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"KenCheung18"},"content":" String commandFromFile \u003d textLine.split(\" \\\\| \")[0];","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"KenCheung18"},"content":" String descriptionFromFile \u003d textLine.split(\" \\\\| \")[1];","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"KenCheung18"},"content":" double amountFromFile \u003d Double. parseDouble(textLine.split(\" \\\\| \")[2]);","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"KenCheung18"},"content":" LocalDate dateFromFile \u003d LocalDate.parse(textLine.split(\" \\\\| \")[3]);","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"KenCheung18"},"content":" // Check for valid amount range","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"KenCheung18"},"content":" if (amountFromFile \u003e 999999.99 || amountFromFile \u003c\u003d 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"KenCheung18"},"content":" throw new KaChinnnngException(\"Expense amount must be between $0.01 and $999999.99\");","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"KenCheung18"},"content":" if (!commandFromFile.equals(\"I\")){","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"KenCheung18"},"content":" expenseType \u003d Integer.parseInt(textLine.split(\" \\\\| \")[4]);","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"KenCheung18"},"content":" // Create appropriate objects based on the commandFromFile","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"KenCheung18"},"content":" switch (commandFromFile) {","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"KenCheung18"},"content":" case \"I\":","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"KenCheung18"},"content":" incomes.add(new Income(descriptionFromFile, dateFromFile, amountFromFile));","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"KenCheung18"},"content":" case \"EF\":","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"KenCheung18"},"content":" expenses.add(new Food(descriptionFromFile, dateFromFile,","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"KenCheung18"},"content":" amountFromFile, MealType.values()[expenseType]));","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"KenCheung18"},"content":" case \"ET\":","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"KenCheung18"},"content":" expenses.add(new Transport(descriptionFromFile, dateFromFile,","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"KenCheung18"},"content":" amountFromFile, TransportationType.values()[expenseType]));","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"KenCheung18"},"content":" case \"EU\":","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"KenCheung18"},"content":" expenses.add(new Utilities(descriptionFromFile, dateFromFile,","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"KenCheung18"},"content":" amountFromFile, UtilityType.values()[expenseType]));","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"KenCheung18"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"The format of this line is incorrect \" + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"KenCheung18"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"KenCheung18"},"content":" System.out.println(INDEX_OUT_OF_BOUND_FROM_FILE_ERROR + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"KenCheung18"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"KenCheung18"},"content":" System.out.println(AMOUNT_NOT_SUPPORT_ERROR + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"KenCheung18"},"content":" } catch (DateTimeParseException e){","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"KenCheung18"},"content":" System.out.println(DATE_TIME_FORMAT_ERROR + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"KenCheung18"},"content":" } catch(NumberFormatException e){","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"KenCheung18"},"content":" System.out.println(NUMBER_FROM_FILE_INCORRECT + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":118}},{"path":"src/main/java/seedu/duke/storage/SaveToTxt.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.storage;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":" * The SaveToTxt class is responsible for saving financial records data to a text file.","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" * It can save both Income and Expense objects to the specified file.","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" * This class handles exceptions for IO errors that may occur during file operations.","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":"public class SaveToTxt {","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" private static final String IO_ERROR_MESSAGE \u003d \"An error occurred while saving tasks to the file.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" private final String path;","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" * Construct a new object of the SaveToTxt class with the file path.","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" * @param path The path to the text file where data will be saved.","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" public SaveToTxt(String path) {","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" * Saves both Income and Expense objects to the specified text file.","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The ArrayList of Income objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The ArrayList of Expense objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"KenCheung18"},"content":" public void saveIncomeAndExpense(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses){","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":" saveIncomeToTextFile(incomes);","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" saveExpenseToTextFile(expenses);","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"KenCheung18"},"content":" System.out.println(IO_ERROR_MESSAGE);","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"KenCheung18"},"content":" * Saves Income objects to the text file. Each Income object is represented as a line in the txt file.","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The ArrayList of Income objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"KenCheung18"},"content":" * @throws IOException If an IO error occurs during the file write operation.","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"KenCheung18"},"content":" public void saveIncomeToTextFile(ArrayList\u003cIncome\u003e incomes) throws IOException {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"KenCheung18"},"content":" try (FileWriter fw \u003d new FileWriter(path)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"KenCheung18"},"content":" for (Income income : incomes) {","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"KenCheung18"},"content":" String incomeDescription \u003d income.getDescription();","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":" String incomeDate \u003d String.valueOf(income.getDate());","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":" String incomeAmount \u003d String.valueOf(income.getAmount());","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":" String textToAdd \u003d \"I\" + \" | \" + incomeDescription + \" | \" + incomeAmount + \" | \" + incomeDate + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"KenCheung18"},"content":" System.out.println(IO_ERROR_MESSAGE);","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"KenCheung18"},"content":" * Saves Expense objects to the text file. Each Expense object is represented as a line in the file,","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"KenCheung18"},"content":" * and the type of Expense (Food, Transport, or Utilities) is specified in the line.","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The ArrayList of Expense objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"KenCheung18"},"content":" * @throws IOException If an IO error occurs during the file write operation.","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"KenCheung18"},"content":" public void saveExpenseToTextFile(ArrayList\u003cExpense\u003e expenses) throws IOException{","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"KenCheung18"},"content":" try (FileWriter fw \u003d new FileWriter(path, true)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"KenCheung18"},"content":" for (Expense expense : expenses) {","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"KenCheung18"},"content":" String textToAdd \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"KenCheung18"},"content":" String expenseDescription \u003d expense.getDescription();","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"KenCheung18"},"content":" String expenseDate \u003d String.valueOf(expense.getDate());;","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"KenCheung18"},"content":" String expenseAmount \u003d String.valueOf(expense.getAmount());","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"KenCheung18"},"content":" // Determine the type of Expense and format the line accordingly","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"KenCheung18"},"content":" if (expense.getClass() \u003d\u003d Food.class) {","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"KenCheung18"},"content":" textToAdd \u003d \"EF\" + \" | \" + expenseDescription + \" | \" + expenseAmount + \" | \"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"KenCheung18"},"content":" + expenseDate + \" | \" + ((Food) expense).getMealType().ordinal() + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"KenCheung18"},"content":" } else if (expense.getClass() \u003d\u003d Transport.class) {","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"KenCheung18"},"content":" textToAdd \u003d \"ET\" + \" | \" + expenseDescription + \" | \" + expenseAmount + \" | \"","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"KenCheung18"},"content":" + expenseDate + \" | \" + ((Transport) expense).getTransportationType().ordinal() + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"KenCheung18"},"content":" } else if (expense.getClass() \u003d\u003d Utilities.class) {","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"KenCheung18"},"content":" textToAdd \u003d \"EU\" + \" | \" + expenseDescription + \" | \" + expenseAmount + \" | \"","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"KenCheung18"},"content":" + expenseDate + \" | \" + ((Utilities) expense).getUtilityType().ordinal() + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"KenCheung18"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"KenCheung18"},"content":" System.out.println(IO_ERROR_MESSAGE);","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":98}},{"path":"src/main/java/seedu/duke/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"import java.util.List;","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" * This class handles the user interface of the program.","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"public class Ui {","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" private static final String lineDivider \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public Scanner scanner;","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" * Constructor for Ui.","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" public Ui() {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" * This method reads the command input by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" * @return String containing the command input by the user","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is no input provided by the user","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" public String readCommand() throws KaChinnnngException {","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" if (scanner.hasNextLine()) {","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"No input provided by the user.\");","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * This method prints the line divider.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" public static void showLineDivider() {","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-11"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" * Prints the welcome message when the program starts.","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" public static void printWelcomeMessage() {","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Welcome to KaChinnnngggg! How may i assist you today?\");","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" * Prints the goodbye message when the program ends.","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" public void printGoodbyeMessage() {","lastModifiedDate":"2023-10-11"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" * prints the message when the user inputs his income","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" * @param income Income object created from the provided fields","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" public static void printIncomeAddedMessage(Income income) {","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Got it. I\u0027ve added this income:\\n\" + income.toString());","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * Prints a message indicating the start of the income list display.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" public void printListIncomeMessage() {","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are your incomes:\");","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Hongzhii"},"content":" public void printExpenseAddedMessage(Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"Got it. I\u0027ve added this expense:\\n\" + expense.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"Hongzhii"},"content":" public void printListExpenseMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"Here are your expenses:\");","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" public void showMatchingIncomes(List\u003cIncome\u003e matchingIncomes) {","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" if(matchingIncomes.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" System.out.println(\"No matching incomes found.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are the matching incomes in your list:\");","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" for (Income income : matchingIncomes) {","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" System.out.println(income.toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" public void showMatchingExpenses(List\u003cExpense\u003e matchingExpenses) {","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" if (matchingExpenses.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" System.out.println(\"No matching expenses found.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are the matching expenses in your list:\");","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" for (Expense expense : matchingExpenses) {","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" System.out.println(expense.toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"limyuhching":5,"bljhty":101,"Hongzhii":9}},{"path":"src/test/java/seedu/duke/commands/BalanceTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * Tests for the {@link Balance} class.","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" * This test class provides test cases to check the calculation and reporting","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" * of financial balance between income and expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"public class BalanceTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * Sets up the test fixture.","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" * Called before every test case method.","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" public void setup() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" incomes.add(new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" incomes.add(new Income(\"Bonus\", LocalDate.of(2023, 10, 15), 1000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" expenses.add(new Expense(\"Rent\", LocalDate.of(2023, 10, 5), 2000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" expenses.add(new Expense(\"Groceries\", LocalDate.of(2023, 10, 7), 100.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with both income and expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly subtracts expenses from income.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" public void testGetBalance_withBothIncomeAndExpenses_returnsCorrectDifference() {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(incomes, expenses);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" assertEquals(3900.0, balance.getBalance());","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with no records.","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly returns 0.","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" public void testNoRecords() {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(new ArrayList\u003c\u003e(), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" assertEquals(0, balance.getBalance(),","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" \"Balance should be 0 when no records are present.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with no expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly returns a positive value equal to income.","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" public void testGetBalance_withNoExpenses_returnsIncomeValue()throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cIncome\u003e incomesOnly \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" incomesOnly.add(new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(incomesOnly, new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" assertEquals(5000.0, balance.getBalance(),","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" \"Balance should equal sum of all incomes when no expenses are present.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with no incomes.","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly returns a negative value equal to expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" public void testGetBalance_withNoIncomes_returnsNegativeExpenseValue()throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cExpense\u003e expensesOnly \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" expensesOnly.add(new Expense(\"Rent\", LocalDate.of(2023, 10, 5), 2000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(new ArrayList\u003c\u003e(), expensesOnly);","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" assertEquals(-2000.0, balance.getBalance(),","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" \"Balance should be negative sum of all expenses when no incomes are present.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":85}},{"path":"src/test/java/seedu/duke/commands/DeleteExpenseCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * This class contains JUnit tests for the DeleteExpenseCommand class.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":"public class DeleteExpenseCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" private DeleteExpenseCommand deleteExpenseCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" private Ui ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" public void setUp() {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" deleteExpenseCommand \u003d new DeleteExpenseCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with valid input. The expense should be deleted.","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_expenseDeleted() throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" Expense expense \u003d new Expense(\"Lunch\", LocalDate.now().minusDays(1), 20.00);","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" expenses.add(expense);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" // Act","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" // Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" assertEquals(0, expenses.size());","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with missing arguments. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" public void testExecute_missingArgument_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense\";","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with an invalid index. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with a non-existent expense index.","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" * It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"limyuhching"},"content":" public void testExecute_nonExistentExpenseIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"limyuhching":82}},{"path":"src/test/java/seedu/duke/commands/DeleteIncomeCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * This class contains JUnit tests for the DeleteIncomeCommand class.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":"public class DeleteIncomeCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" private DeleteIncomeCommand deleteIncomeCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" private Ui ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" public void setUp() {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" deleteIncomeCommand \u003d new DeleteIncomeCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with valid input. The income should be deleted.","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_incomeDeleted() throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" Income income \u003d new Income(\"Salary\",","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" incomes.add(income);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" // Act","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" // Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" assertEquals(0, incomes.size());","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with missing arguments. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" public void testExecute_missingArgument_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income\";","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with an invalid index. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with a non-existent income index.","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"limyuhching"},"content":" * It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"limyuhching"},"content":" public void testExecute_nonExistentIncomeIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"limyuhching":83}},{"path":"src/test/java/seedu/duke/commands/EditExpenseCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"public class EditExpenseCommandTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" private String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" public void setUp() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" // Initialize the expenses and fullCommand for testing","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" expenses.add(new Expense(\"Rent\", LocalDate.of(2023, 10, 5), 2000.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" expenses.add(new Expense(\"Groceries\", LocalDate.of(2023, 10, 7), 100.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" fullCommand \u003d \"edit expense 3 expense /cat food /type lunch /de chicken sandwich /date 01/10/2023 /amt 10.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" EditExpenseCommand editExpenseCommand \u003d new EditExpenseCommand(expenses, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" // This test checks if the execute method throws an exception when the index is out of bounds","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" editExpenseCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" });","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_expenseEdited() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" fullCommand \u003d \"edit expense 1 expense /cat food /type lunch /de chicken rice /date 01/10/2023 /amt 10.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" EditExpenseCommand editExpenseCommand \u003d new EditExpenseCommand(expenses, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" // Test if the execute method changes the expense and prints the changes","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e editExpenseCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" // Verify if the expense was updated correctly","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" Expense updatedExpense \u003d expenses.get(0);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" assertEquals(\"Food Expense (LUNCH): chicken rice | Date: 01/Oct/2023 | Amount: $10.00\",","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":" updatedExpense.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidExpense_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" // Test if execute method throws a KaChinnnngException for an invalid command","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit expense 1 invalid expense command\";","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" EditExpenseCommand editExpenseCommand \u003d new EditExpenseCommand(expenses, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e editExpenseCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":54,"Hongzhii":4}},{"path":"src/test/java/seedu/duke/commands/EditIncomeCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"public class EditIncomeCommandTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" private EditIncomeCommand editIncomeCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" private String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" public void setUp() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" // Initialize the incomes and fullCommand for testing","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" incomes.add(new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" incomes.add(new Income(\"Bonus\", LocalDate.of(2023, 10, 15), 1000.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit income 3 income /de salary for October /date 01/10/2023 /amt 5000.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand \u003d new EditIncomeCommand(incomes, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" // This test checks if the execute method throws an exception when the index is out of bounds","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" });","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_incomeEdited() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit income 1 income /de salary for October /date 01/10/2023 /amt 5000.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand \u003d new EditIncomeCommand(incomes, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" // Test if the execute method changes the income and prints the changes","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e editIncomeCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" // Verify if the income was updated correctly","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" Income updatedincome \u003d incomes.get(0);","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" assertEquals(\"Income: salary for October | Date: 01/Oct/2023 | Amount: $5000.00\",","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" updatedincome.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIncome_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" // Test if execute method throws a KaChinnnngException for an invalid command","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit income 1 invalid income command\";","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand \u003d new EditIncomeCommand(incomes, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e editIncomeCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":59}},{"path":"src/test/java/seedu/duke/financialrecords/ExpenseTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * Test suite for the {@link Expense} class.","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" * This class contains unit tests to validate the behavior of the Expense class and ensure","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" * correctness in the representation and management of financial expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"public class ExpenseTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" private Expense expense;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * Initializes common test fixtures before each test execution.","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" void setUp() {","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" expense \u003d new Expense(\"Lunch\", LocalDate.now().minusDays(1), 20.00);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" fail(\"Setup failed due to exception: \" + e.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" * Tests if an exception is thrown when the description of an Expense object is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" void testExpenseDescription_notEmpty(){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e new Expense(\"\", LocalDate.now(), 20.00));","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" * Tests if an exception is thrown when the amount of an Expense object is negative.","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" void testExpenseAmount_notNegative(){","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e new Expense(\"Lunch\", LocalDate.now(), -20.00));","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" * Tests if an exception is thrown when the date of an Expense object is in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" void testExpenseDate_notFuture(){","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e new Expense(\"Lunch\", LocalDate.now().plusDays(1), 20.00));","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" * Tests if the correct description of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" void getDescription() {","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Lunch\", expense.getDescription());","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" * Tests if the correct date of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" void getDate() {","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.now().minusDays(1), expense.getDate());","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * Tests if the correct amount of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" void getAmount() {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" assertEquals(20.00, expense.getAmount());","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" * Tests if the correct date string of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" void getDateString() {","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\")),","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" expense.getDateString());","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" * Tests the string representation of the Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" void testToString() {","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Expense: Lunch | Date: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\")) +","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" \" | Amount: $20.00\",","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" expense.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":101}},{"path":"src/test/java/seedu/duke/financialrecords/IncomeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"public class IncomeTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" public void testIncomeCreation() throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" Income income \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" assertNotNull(income);","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Salary\", income.getDescription());","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.of(2023, 10, 12), income.getDate());","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" assertEquals(5000.00, income.getAmount());","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" public void testToString() throws KaChinnnngException{","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" Income income \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" String expected \u003d \"Income: Salary | Date: 12/Oct/2023 | Amount: $5000.00\";","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" assertEquals(expected, income.toString());","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" public void testInvalidDescription() {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" new Income(\"\", LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" public void testInvalidAmount() {","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" new Income(\"Salary\", LocalDate.of(2023, 10, 12), -5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":42}},{"path":"src/test/java/seedu/duke/parser/ExpenseParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"public class ExpenseParserTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if the date is parsed correctly.","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if the parsed date is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" void parseDate_validDate_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" LocalDate expectedDate \u003d LocalDate.of(2020, 02, 29);","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" LocalDate actualDate \u003d ExpenseParser.parseDate(\"29/02/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedDate, actualDate);","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid day.","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" void parseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseDate(\"32/02/2020\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid year.","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" void parseDate_invalidDate_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseDate(\"10/10/20202\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse a date that is in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" void parseDate_futureDate_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseDate(\"10/10/3021\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" * It verifies if the food category are correctly parsed into an Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException for invalid scenarios","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" void testParseExpense_foodCategory_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, \"lunch\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" assertTrue(ExpenseParser.parseExpense(expenseFields) instanceof Food);","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" * It verifies if the transport category are correctly parsed into an Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException for invalid scenarios","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" void testParseExpense_transportCategory_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"transport\");","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, \"bus\");","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"from nus to changi\");","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"1.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" assertTrue(ExpenseParser.parseExpense(expenseFields) instanceof Transport);","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" * It verifies if the utilities category are correctly parsed into an Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException for invalid scenarios","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" void testParseExpense_utilitiesCategory_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"utilities\");","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, \"electricity\");","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"air con bill\");","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"50.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" assertTrue(ExpenseParser.parseExpense(expenseFields) instanceof Utilities);","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for an unrecognized category.","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" void testParseExpense_invalidCategory_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"invalid\");","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for missing amount fields.","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" void testParseExpense_missingAmountField_success() {","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for missing description fields.","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" void testParseExpense_missingDescriptionFields_success(){","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for missing date fields.","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":" void testParseExpense_missingDateField_success(){","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"bljhty"},"content":" * Tests if the getIndex method in ExpenseParser throws an exception for a valid index format.","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" void testGetIndexValid() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.INDEX_FIELD, \"1\");","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":" assertEquals(1, ExpenseParser.getIndex(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":" * Tests if the getIndex method in ExpenseParser throws an exception for an invalid index format.","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" void testGetIndexInvalid() {","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.INDEX_FIELD, \"a\");","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.getIndex(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the provided amount exceeds the limit.","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"bljhty"},"content":" void testParseAmount_aboveLimit_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":199,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"1000000.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the category field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"bljhty"},"content":" void testParseCategory_emptyString_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"9999.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the description field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"bljhty"},"content":" void testParseDescription_emptyString_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"9999.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the date field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"bljhty"},"content":" void testParseDate_emptyString_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"9999.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the amount field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"bljhty"},"content":" void testParseAmount_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":258,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":259,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":260,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":261,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":262,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":258,"Hongzhii":5}},{"path":"src/test/java/seedu/duke/parser/IncomeParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * JUnit test class for IncomeParser","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"public class IncomeParserTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" * This method tests the parseIncome method in IncomeParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" * It verifies if the incomeFields are correctly parsed into an Income object.","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" public void testParseIncome() throws KaChinnnngException {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"5000.00\");","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" Income income \u003d IncomeParser.parseIncome(incomeFields);","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Salary\", income.getDescription());","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.of(2023, 10, 12), income.getDate());","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" assertEquals(5000.00, income.getAmount());","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if the date is parsed correctly.","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if the parsed date is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" public void testParseDate_validDate() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" LocalDate result \u003d IncomeParser.parseDate(\"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.of(2023, 10, 12), result);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid date.","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" * @see KaChinnnngException if the parsed date is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" public void testParseDate_invalidDate() {","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseDate(\"12/13/2023\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse a date that is in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" public void testParseDate_futureDate() {","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseDate(\"12/10/2025\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid day.","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" void testParseDate_invalidDay(){","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseDate(\"32/10/2023\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" * This method tests the getIndex method in IncomeParser when trying to get index from an empty input.","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" public void testGetIndex_missingField() {","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e inputMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.getIndex(inputMap));","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs amount that is above the limit.","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" void testParseAmount_aboveLimit_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"1000000000.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an empty string for description.","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" void testParseDescription_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"10.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an empty string for date.","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" void testParseDate_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"10.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an empty string for amount.","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" void testParseAmount_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an invalid index.","lastModifiedDate":"2023-10-18"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" * Specifically negative index","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" void testGetIndex_negativeIndex_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e inputMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" inputMap.put(IncomeParser.INDEX_FIELD, \"-1\");","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.getIndex(inputMap));","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an invalid index.","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" * Specifically zero index","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" void testGetIndex_zeroIndex_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e inputMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":" inputMap.put(IncomeParser.INDEX_FIELD, \"0\");","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.getIndex(inputMap));","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"bljhty":167}}] +[{"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":"bljhty"},"content":" implementation group: \u0027com.google.code.gson\u0027, name: \u0027gson\u0027, version: \u00272.10.1\u0027","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"run {","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":5,"-":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":"bljhty"},"content":"--------|:-----------------:|:----------------------------------------:|:---------:","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Cheung Ka Yuen | [Github](https://github.com/KenCheung18) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Lee Jun Hao Bryan | [Github](https://github.com/bljhty) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Lim Yuh Ching | [Github](https://github.com/limyuhching) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-12"},{"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":{"limyuhching":1,"bljhty":2,"KenCheung18":1,"-":5}},{"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":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"### IncomeManager","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"the IncomeManager is facilitated by `IncomeParser`, `IncomeManager`, `IncomeList` and `Ui`.","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"1. The user inputs the command to add income. This input is then passed to `IncomeParser` to be parsed.","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"2. `IncomeParser` then parses the input and returns a `Income` object.","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"3. `IncomeManager` then adds the `Income` object to the `IncomeList`.","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"4. `IncomeManager` then returns a `String` to `Ui` to be printed out to the user.","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"![incomeManager_sequence_diagram.png](..%2Fimages%2FincomeManager_sequence_diagram.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":"### ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":"The ExpenseManager is facilitated by `ExpenseParser`, `ExpenseManager`, `ExpenseList` and `Ui`","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":"1. The user inputs the command to add expense.","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":"2. This command is used to instantiate a ExpenseManager object which is executed.","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":"3. During execution, the command is passed to ExpenseParser which extracts and parses the input fields.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":"4. Input field information is passed to the relevant Expense constructor which returns a Expense object.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":"5. Expense object is returned to ExpenseManager from ExpenseParser.","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":"6. Expense obejct is returned to Duke from ExpenseManager.","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":"![expenseManager_sequence_diagram.png](/Users/apple/Desktop/expenseManager_sequence_diagram.png)","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":"### Find Command","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"The FindCommand is facilitated by `FindCommand`, `FindParser`, `Ui`,`ExpenseList` and `IncomeList`.","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"1. The user will first input the command to find the expense or income.","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":"find /t \u003ctype\u003e /cat [category] /de [description] /date [date]","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"2. The inputs will then be passed to `FindParser` to get the necessary fields such as type, category, description and date.","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"3. The FindCommand is then instantiated with the necessary fields.","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":"4. Users can choose to search through the expense list or income list.","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"5. If users searches through the income list, either the description or date will be used to search through the income list.","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":"6. If users searches through the expense list, either the category or date will be used to search through the expense list.","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"7. The execute method will then be called to search through the list and return the list of expenses or incomes that matches the search criteria.","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"![FindCommand_SequenceDiagram.png](..%2Fimages%2FFindCommand_SequenceDiagram.png)","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"KenCheung18"},"content":"### GetFromTxt Command","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"KenCheung18"},"content":"The GetFromTxt Command is facilitated by `IOException`,`Scanner`, `KaChinnnnngException`, `IncomeList` and `ExpenseList`","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"KenCheung18"},"content":"1. The user start the program and the command will start automatically with a default path","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"KenCheung18"},"content":"2. Once the command executed, it will try to create an txt file on the default path","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"KenCheung18"},"content":"3. If file failed to create, throw an `IOException`","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"KenCheung18"},"content":"4. Catch the `IOExceotion` and print error messages","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":"5. Create a `Scanner` Object s to get content from txt file","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":"6. If amount in txt file exceed limit or incorrect, throw `KaChinnnningException`","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":"7. Read the content on the file and add corresponding object to incomes or expenses list","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":"![FindCommand_SequenceDiagram.png](..%2Fimages%2FGetFromTxt.png)","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":65,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":69,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":71,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":73,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"|---------|----------|------------------------------------|--------------------------------------------------------|","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"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":76,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| add new income entry | track all my incomes |","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| add new expense entry | track all of my expenses |","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| delete income entry | remove incomes that I no longer want to track |","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| delete expense entry | remove expenses that I no longer want to track |","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| list both income and expense entry | view all my expenses and incomes |","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":"| v1.0 |user| check my balace | better bugdet my expenditures |","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":84,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":86,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":88,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":90,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":92,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":94,"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":{"bljhty":32,"Hongzhii":13,"KenCheung18":12,"-":37}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"# Hi","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":{"bljhty":1,"-":7}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"# KaChinnnng User Guide","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"welcome to KaChinnnng a personal finance tracker that helps you keep track of your expenses and income.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"2. Download the latest version of `KaChinnnng` from [here](http://link.to/duke).","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"3. Copy the downloaded file to the folder you want to use as the home folder for your KaChinnnng.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"4. open a command terminal and navigate to the folder where you have copied the file to.","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"5. type in the following to run the program","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"java -jar KaChinnnng.jar","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"6. if successful you should see the following output","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":"Welcome to KaChinnnngggg! How may i assist you today?","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"7. type in desired commands and press enter to execute them. (note: commands are not case sensitive)","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"{Give detailed description of each feature}","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"### View help : help","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"Shows basic commands executable by the program.","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":"Format:","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":"help","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"### Add an entry: add","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"Creates a new entry for income or expenses in the program.","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":"Values of income and expense added has to be lower than 1000000.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":"Income and Expense values takes up to 2 decimal places.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"To add an income:","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"add income /description \u003cdescription\u003e /date \u003cdate\u003e /amount \u003camount\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"To add an expense:","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"add expense /catergory \u003ccatergory\u003e /description \u003cdescription\u003e /date \u003cdate\u003e /amount \u003camount\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":"Use case:","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"- Prompts users if any of the fields are empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":"- There are only 3 categories for expenses: `Food`, `Transport`, `Utilities`.","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"- Amount is takes up to 2 decimal places.","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":"- by default, amount is set to SGD.","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":"- format of date is `dd/mm/yyyy`.","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":"- Date needs to be an existing date, and cannot be dates in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":"add income /description salary /date 01/01/2020 /amount 1000","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":"add expense /category Food /description lunch /date 01/01/2020 /amount 10.50","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":"### List all entries: list","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":"Shows a full list of both the expenses and income created by the user.","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":"User can choose to view the list of income/expenses separately as well.","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":"Format:","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"list","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"list income","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":"list expense","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":"### Delete an entry: delete","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":"Deletes an entry from the list of income/expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":"Format:","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":"delete expense \u003cindex\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":"delete income \u003cindex\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":"```","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":94,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":96,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer? ","lastModifiedDate":"2020-05-24"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":"**A**: {your answer here}","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":100,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":102,"author":{"gitId":"-"},"content":"{Give a \u0027cheat sheet\u0027 of commands here}","lastModifiedDate":"2020-05-24"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":104,"author":{"gitId":"-"},"content":"* Add todo `todo n/TODO_NAME d/DEADLINE`","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"bljhty":78,"-":26}},{"path":"images/expenseManager_sequence_diagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"actor Duke","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"participant ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"participant ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"participant Expense","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"Duke -\u003e ExpenseManager: provides expense details","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"activate ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":"ExpenseManager -\u003e ExpenseParser: extractExpenseFields(details)","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"activate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser -\u003e ExpenseParser: parseDate(expenseDateString)","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"activate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e ExpenseParser: validates date format","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser -\u003e ExpenseParser: parseExpense(argumentsByField)","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e ExpenseParser: validates fields","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e Expense: calls Expense constructor","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":"Expense --\u003e ExpenseParser: new Expense object","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":"ExpenseParser --\u003e ExpenseManager: returns Expense object","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":"deactivate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":"ExpenseManager --\u003e Duke: returns new Expense object","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":"deactivate ExpenseParser","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":"deactivate ExpenseManager","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"Hongzhii":23}},{"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":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.Balance;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ClearAll;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ClearExpenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ClearIncomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.DeleteExpenseCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.DeleteIncomeCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.ExpenseLister;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.ExpenseManager;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.FindCommand;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.EditExpenseCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.EditIncomeCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.IncomeLister;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.IncomeManager;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.ListCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.commands.UsageInstructions;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.storage.GetFromTxt;","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.storage.SaveToTxt;","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":"import seedu.duke.parser.FindParser;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" * This class is the main class of the program.","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" * It contains the main method that runs the program.","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" private Ui ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":" private String storagePath;","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" private SaveToTxt save;","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" private GetFromTxt get;","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" public Duke() {","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"KenCheung18"},"content":" storagePath \u003d \"KaChinnnngggg.txt\";","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"KenCheung18"},"content":" save \u003d new SaveToTxt(storagePath);","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":" get \u003d new GetFromTxt(storagePath);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" * This method runs the program.","lastModifiedDate":"2023-10-11"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" public void run() {","lastModifiedDate":"2023-10-09"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" Ui.printWelcomeMessage();","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":" get.getFromTextFile(incomes, expenses);","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"\\tOOPS!!! File not found.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-11"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-11"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-10-11"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" String command \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" String[] parts \u003d command.split(\"-\", 2);","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" switch (parts[0]) {","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" case \"exit\":","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" isExit \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-11"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" case \"add_income\":","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" try{","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" IncomeManager incomeCommand \u003d new IncomeManager(fullCommand);","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" incomeCommand.execute();","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" Income newIncome \u003d incomeCommand.getNewIncome();","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" incomes.add(newIncome);","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" ui.printIncomeAddedMessage(newIncome);","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" case \"list_income\":","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" new IncomeLister(incomes, ui).listIncomes();","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"Hongzhii"},"content":" case \"add_expense\":","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Hongzhii"},"content":" try{","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Hongzhii"},"content":" ExpenseManager expenseCommand \u003d new ExpenseManager(fullCommand);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Hongzhii"},"content":" expenseCommand.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Hongzhii"},"content":" Expense newExpense \u003d expenseCommand.getNewExpense();","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"Hongzhii"},"content":" expenses.add(newExpense);","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"Hongzhii"},"content":" ui.printExpenseAddedMessage(newExpense);","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"Hongzhii"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"Hongzhii"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Hongzhii"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Hongzhii"},"content":" case \"list_expense\":","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Hongzhii"},"content":" new ExpenseLister(expenses, ui).listExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"limyuhching"},"content":" case \"list\":","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"limyuhching"},"content":" new ListCommand(incomes, expenses, ui).execute();","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"limyuhching"},"content":" case \"delete_income\":","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":116,"author":{"gitId":"limyuhching"},"content":" new DeleteIncomeCommand().execute(incomes, fullCommand, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"limyuhching"},"content":" case \"delete_expense\":","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"limyuhching"},"content":" new DeleteExpenseCommand().execute(expenses, fullCommand, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"KenCheung18"},"content":" case \"help\":","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"KenCheung18"},"content":" new UsageInstructions(ui).getHelp();","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"KenCheung18"},"content":" case \"balance\":","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"KenCheung18"},"content":" new Balance(incomes, expenses).getBalanceMessage();","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" case \"find\":","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" String[] parsedParameters \u003d FindParser.parseFindCommand(fullCommand);","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" incomes, expenses,","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" parsedParameters[0], parsedParameters[1],","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" parsedParameters[2], parsedParameters[3], ui);","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"KenCheung18"},"content":" case \"clear_incomes\":","lastModifiedDate":"2023-10-25"},{"lineNumber":150,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":151,"author":{"gitId":"KenCheung18"},"content":" new ClearIncomes(incomes).clearAllIncomes();","lastModifiedDate":"2023-10-25"},{"lineNumber":152,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"KenCheung18"},"content":" case \"clear_expenses\":","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"KenCheung18"},"content":" new ClearExpenses(expenses).clearAllIncomes();","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"KenCheung18"},"content":" case \"clear_all\":","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"KenCheung18"},"content":" new ClearAll(incomes, expenses).clearAllIncomeAndExpense();","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"KenCheung18"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"limyuhching"},"content":" case \"edit_income\":","lastModifiedDate":"2023-10-26"},{"lineNumber":165,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":166,"author":{"gitId":"limyuhching"},"content":" new EditIncomeCommand(incomes, fullCommand).execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":167,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":169,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":170,"author":{"gitId":"limyuhching"},"content":" case \"edit_expense\":","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"limyuhching"},"content":" new EditExpenseCommand(expenses, fullCommand).execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"limyuhching"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":" default:","lastModifiedDate":"2023-10-11"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Invalid command. Please try again.\");","lastModifiedDate":"2023-10-11"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-11"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-11"},{"lineNumber":182,"author":{"gitId":"limyuhching"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":183,"author":{"gitId":"limyuhching"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":185,"author":{"gitId":"KenCheung18"},"content":" save.saveIncomeAndExpense(incomes,expenses);","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" ui.printGoodbyeMessage();","lastModifiedDate":"2023-10-11"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":191,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-09"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" new Duke().run();","lastModifiedDate":"2023-10-11"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":195,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"limyuhching":37,"bljhty":89,"Hongzhii":14,"KenCheung18":46,"-":9}},{"path":"src/main/java/seedu/duke/commands/Balance.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" * The `Balance` class represents a financial balance calculator","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" * that calculates the balance between income and expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" * It takes a list of income and expense records as input and provides methods to calculate and display the balance.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":"public class Balance {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" private final ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" private final ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" public Balance(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" * Calculates the financial balance by subtracting the total expenses from the total income.","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" * @return The calculated financial balance.","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" public double getBalance() {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" double totalIncome \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" double totalExpense \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":" for (Income income : incomes) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" totalIncome +\u003d income.getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":" for (Expense expense : expenses) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" totalExpense +\u003d expense.getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"KenCheung18"},"content":" return totalIncome - totalExpense;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" * Prints a message to the console displaying the calculated financial balance.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"KenCheung18"},"content":" public void getBalanceMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"Balance: \" + getBalance());","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"KenCheung18":45}},{"path":"src/main/java/seedu/duke/commands/ClearAll.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" * The ClearAll class is responsible for clearing both the list of incomes and expenses.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" * It provides a method to clear all incomes and expenses from the corresponding list.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"public class ClearAll {","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" * Constructs a ClearAll object with the given lists of incomes and expenses.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The list of incomes to be cleared.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The list of expenses to be cleared.","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" public ClearAll(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" * Clears all incomes and expenses from their respective lists and prints a message to confirm the action.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":" public void clearAllIncomeAndExpense() {","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" incomes.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" expenses.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"Both income and expense lists cleared\");","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":35}},{"path":"src/main/java/seedu/duke/commands/ClearExpenses.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":" * The ClearExpenses class is responsible for clearing the list of expenses.","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" * It provides a method to clear all expenses from the list.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"public class ClearExpenses {","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" * Constructs a ClearExpenses object with the given list of expenses.","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The list of expenses to be cleared.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" public ClearExpenses(ArrayList\u003cExpense\u003e expenses) {","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" * Clears all expenses from the list and prints a message to confirm the action.","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" public void clearAllIncomes(){","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" expenses.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"You have cleared the expense list\");","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":30}},{"path":"src/main/java/seedu/duke/commands/ClearIncomes.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":" * The ClearIncomes class is responsible for clearing the list of incomes.","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" * It provides a method to clear all incomes from the list.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"public class ClearIncomes {","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" * Constructs a ClearIncomes object with the given list of incomes.","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The list of incomes to be cleared.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" public ClearIncomes(ArrayList\u003cIncome\u003e incomes) {","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" * Clears all incomes from the list and prints a message to confirm the action.","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" public void clearAllIncomes() {","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" incomes.clear();","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"You have cleared the income list\");","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"KenCheung18":32}},{"path":"src/main/java/seedu/duke/commands/Commands.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":" * Represents the abstract class for all commands.","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":" * This class serves as a blueprint for all specific command classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"public abstract class Commands {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"limyuhching":1,"bljhty":17}},{"path":"src/main/java/seedu/duke/commands/DeleteExpenseCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":" * The `DeleteExpenseCommand` class represents a command to delete an expense record from a list of expenses.","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" * It extends the `Commands` class and is used to manage expense records in the application.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"public class DeleteExpenseCommand extends Commands {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * Constructs a `DeleteExpenseCommand` object. This class does not have any specific constructor logic.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" public DeleteExpenseCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" * Executes the `DeleteExpenseCommand` to remove an expense record from the list of expenses.","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" * @param expenses The list of expense records to be modified.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" * @param fullcommand The full command entered by the user, including the index of the expense to be deleted.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is a problem with the command execution, such as missing arguments,","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" * an invalid index, or a non-existent expense record.","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" public void execute(ArrayList\u003cExpense\u003e expenses, String fullcommand, Ui ui) throws KaChinnnngException {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" int index \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullcommand.split(\" \", 3);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" index \u003d Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" Expense removedExpense \u003d expenses.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" expenses.remove(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. This expense record has been deleted:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" System.out.println(removedExpense);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Expense \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"limyuhching":45}},{"path":"src/main/java/seedu/duke/commands/DeleteIncomeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":" * The DeleteIncomeCommand class is responsible for deleting an income record from the list of incomes.","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"public class DeleteIncomeCommand extends Commands {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" * Constructs a DeleteIncomeCommand object.","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" public DeleteIncomeCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" * Executes the DeleteIncomeCommand to remove an income record from the list of incomes.","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" * @param incomes The list of income records to be modified.","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" * @param fullcommand The full command entered by the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is a problem with the command execution, such as missing arguments,","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" * invalid index, or a non-existent income record.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" public void execute(ArrayList\u003cIncome\u003e incomes, String fullcommand, Ui ui) throws KaChinnnngException {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" int index \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullcommand.split(\" \", 3);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" index \u003d Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" Income removedIncome \u003d incomes.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" incomes.remove(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. This income record has been deleted:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" System.out.println(removedIncome);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Income \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"limyuhching":45}},{"path":"src/main/java/seedu/duke/commands/EditExpenseCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"public class EditExpenseCommand extends Commands {","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":" ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" int index;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * Constructs an EditExpenseCommand with the specified expense records and full command.","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" * @param expenses The ArrayList of Expense objects containing expense records.","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string entered by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in the command creation, such as missing arguments.","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" public EditExpenseCommand(ArrayList\u003cExpense\u003e expenses, String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" * Executes the edit expense command. It parses the user input, retrieves the new expense information,","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" * updates the expense record, and prints the changes.","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in executing the command, such as missing arguments,","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * incorrect index, or if the specified expense record does not exist.","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" @Override","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" assert expenses !\u003d null : \"Incomes ArrayList must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" assert fullCommand !\u003d null : \"Full command string must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" index \u003d getIndex(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" ExpenseManager expenseCommand \u003d new ExpenseManager(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" expenseCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" Expense newExpense \u003d expenseCommand.getNewExpense();","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" Expense removedExpense \u003d expenses.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" expenses.set(index, newExpense);","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. The expense record you\u0027ve specified has been changed:\");","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Before: \" + removedExpense);","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"After: \" + newExpense);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Expense \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" * Extracts and returns the index from the full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" * @return The index of the income record to be edited.","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in extracting the index, such as missing arguments","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" * or if the index is not a valid integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" private int getIndex(String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullCommand.split(\" \", 4);","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" assert tokens.length \u003e\u003d 4 : \"Command must have at least 4 tokens\";","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" return Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":71}},{"path":"src/main/java/seedu/duke/commands/EditIncomeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"public class EditIncomeCommand extends Commands {","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" int index;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" * Constructs an EditIncomeCommand with the specified income records and full command.","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" * @param incomes The ArrayList of Income objects containing income records.","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string entered by the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" public EditIncomeCommand(ArrayList\u003cIncome\u003e incomes, String fullCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" this.fullCommand \u003d fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" * Executes the edit income command. It parses the user input, retrieves the new income information,","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" * updates the income record, and prints the changes.","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in executing the command, such as missing arguments,","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" * incorrect index, or if the specified income record does not exist.","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" @Override","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" assert incomes !\u003d null : \"Incomes ArrayList must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" assert fullCommand !\u003d null : \"Full command string must not be null\";","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" index \u003d getIndex(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" IncomeManager incomeCommand \u003d new IncomeManager(fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" incomeCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" Income newIncome \u003d incomeCommand.getNewIncome();","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" Income removedIncome \u003d incomes.get(index);","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" incomes.set(index, newIncome);","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Noted. The income record you\u0027ve specified has been changed:\");","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Before: \" + removedIncome);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"After: \" + newIncome);","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! Income \" + (index+1) + \" does not exist\");","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" * Extracts and returns the index from the full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" * @param fullCommand The full command string.","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" * @return The index of the income record to be edited.","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" * @throws KaChinnnngException If there is an error in extracting the index, such as missing arguments","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" * or if the index is not a valid integer.","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" private int getIndex(String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" String[] tokens \u003d fullCommand.split(\" \", 4);","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" assert tokens.length \u003e\u003d 4 : \"Command must have at least 4 tokens\";","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" return Integer.parseInt(tokens[2])-1;","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"You\u0027re missing an argument\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" } catch (NullPointerException | NumberFormatException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" throw new KaChinnnngException(\"Oops! An integer index is expected\");","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":72}},{"path":"src/main/java/seedu/duke/commands/ExpenseLister.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Represents the command that when executed, lists all expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * This class is a child class of the Command class.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"public class ExpenseLister extends Commands {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":" private final ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * Constructor for ExpenseLister.","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param expenses","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param ui","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" public ExpenseLister(ArrayList\u003cExpense\u003e expenses, Ui ui) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" listExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" * This method lists all incomes.","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" public void listExpenses() {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" if (expenses.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"You have no recorded expenses.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"Here are your expenses:\");","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":" for (int i \u003d 0; i \u003c expenses.size(); i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Hongzhii"},"content":" System.out.println((i + 1) + \". \" + expenses.get(i).toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Hongzhii"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":53}},{"path":"src/main/java/seedu/duke/commands/ExpenseManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.parser.ExpenseParser;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * This is the class that manages the creation of new expense","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class ExpenseManager extends Commands{","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private final String details;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":" private Expense newExpense;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" public ExpenseManager(String details) {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" this.details \u003d details;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * This method is used to execute the command","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d extractExpenseFields(details);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" newExpense \u003d ExpenseParser.parseExpense(expenseFields);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * This method returns new expense created","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" public Expense getNewExpense() {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" return newExpense;","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" * This method extracts the fields of the expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" * @param details String containing the details of the expense","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" * @return expenseFields HashMap containing the fields of the income","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" private HashMap\u003cString, String\u003e extractExpenseFields(String details) throws KaChinnnngException{","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" HashMap\u003cString,String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Hongzhii"},"content":" String[] parts \u003d details.split(\"/cat | /type | /de | /date | /amt \");","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Hongzhii"},"content":" if(parts.length !\u003d 6) {","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Missing fields detected\");","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, parts[1].trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, parts[2].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, parts[3].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, parts[4].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, parts[5].trim());","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Hongzhii"},"content":" return expenseFields;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":62}},{"path":"src/main/java/seedu/duke/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.time.YearMonth;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.util.List;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * Represents a command to find and display financial records (either incomes or expenses) based on specific criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" * The criteria include type (income/expense), category, description, and date.","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" * This command supports searching by a specific date or by a month. If a date isn\u0027t provided, it will not be used","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" * as a filter. Similarly, if the category or description isn\u0027t provided, they won\u0027t be used as filters.","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"public class FindCommand extends Commands {","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" private static final List\u003cString\u003e VALID_EXPENSE_CAT \u003d Arrays.asList(\"food\", \"transport\", \"utilities\");","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" private final ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" private final ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" private final String type;","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" private final String category;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" private final String description;","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" private final LocalDate date;","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" private boolean isSearchByMonth \u003d false;","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" if(!dir.mkdirs()) {","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/FindCommand.log\", true);","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" * Constructs a new FindCommand with the given criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" * @param incomes The list of incomes to search from.","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" * @param expenses The list of expenses to search from.","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" * @param type The type of financial record to search for (either \"income\" or \"expense\").","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" * @param category The category to filter the results by.","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" * @param description The description to filter the results by.","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" * @param dateString The date (or month) to filter the results by. Expected format: dd/MMM/yyyy.","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" * @param ui The UI component to display results.","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If an invalid type is provided or if there\u0027s an error parsing the date.","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" public FindCommand(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses, String type,","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" String category, String description, String dateString, Ui ui) throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" if (type \u003d\u003d null || !type.equalsIgnoreCase(\"income\") \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" !type.equalsIgnoreCase(\"expense\")) {","lastModifiedDate":"2023-10-29"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Invalid type. Please use \u0027income\u0027 or \u0027expense\u0027.\");","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" if (\"expense\".equalsIgnoreCase(type) \u0026\u0026 category !\u003d null \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" !VALID_EXPENSE_CAT.contains(category.toLowerCase())) {","lastModifiedDate":"2023-10-29"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Invalid expense category provided! Allowed categories are: \"","lastModifiedDate":"2023-10-29"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" + VALID_EXPENSE_CAT);","lastModifiedDate":"2023-10-29"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" this.date \u003d parseDate(dateString); // Convert date string to LocalDate","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, String.format(\"FindCommand initialised with type: %s\", type));","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" * Executes the find command. Searches through the provided list of incomes or expenses and displays","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" * matching results based on the given criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If there\u0027s an error during execution, such as an invalid type.","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-24"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" LOGGER.info(\"Executing FindCommand\");","lastModifiedDate":"2023-10-24"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" assert incomes !\u003d null : \"incomes should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" assert expenses !\u003d null : \"expenses should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cExpense\u003e matchingExpenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cIncome\u003e matchingIncomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" if (\"expense\".equalsIgnoreCase(type)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" for (Expense e : expenses) {","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" if (matchesCriteria(e)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" matchingExpenses.add(e);","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, String.format(\"Found %d matching expenses\", matchingExpenses.size()));","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" if (matchingExpenses.isEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":" ui.printMessage(\"No matching expenses found.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" ui.showMatchingExpenses(matchingExpenses);","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" } else if (\"income\".equalsIgnoreCase(type)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" for (Income i : incomes) {","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" if (matchesCriteria(i)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" matchingIncomes.add(i);","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO,String.format(\"Found %d matching incomes\", matchingIncomes.size()));","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" if (matchingIncomes.isEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" Ui.showLineDivider();","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" ui.printMessage(\"No matching incomes found.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" ui.showMatchingIncomes(matchingIncomes);","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid type: \" + type);","lastModifiedDate":"2023-10-24"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" * Determines if a given date matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" * @param dateToCheck The date to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":" * @return True if the date matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":" private boolean matchesDate(LocalDate dateToCheck) {","lastModifiedDate":"2023-10-24"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":" if (this.date !\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":" if (isSearchByMonth) {","lastModifiedDate":"2023-10-23"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" return dateToCheck.getMonthValue() \u003d\u003d this.date.getMonthValue()","lastModifiedDate":"2023-10-29"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" \u0026\u0026 dateToCheck.getYear() \u003d\u003d this.date.getYear();","lastModifiedDate":"2023-10-29"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":" return dateToCheck.isEqual(this.date);","lastModifiedDate":"2023-10-24"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-24"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":" return true; // If this.date is null, then any date matches the criteria","lastModifiedDate":"2023-10-24"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":" * Determines if a given category matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":169,"author":{"gitId":"bljhty"},"content":" * @param categoryToCheck The category to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":170,"author":{"gitId":"bljhty"},"content":" * @return True if the category matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"bljhty"},"content":" private boolean matchesCategory(String categoryToCheck) {","lastModifiedDate":"2023-10-24"},{"lineNumber":173,"author":{"gitId":"bljhty"},"content":" return this.category \u003d\u003d null || (categoryToCheck !\u003d null \u0026\u0026 categoryToCheck.equalsIgnoreCase(this.category));","lastModifiedDate":"2023-10-24"},{"lineNumber":174,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" * Determines if a given description matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" * The description matches if it contains all the keywords specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":" * If no description is specified in the command, then any description matches the criteria.","lastModifiedDate":"2023-10-26"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" * @param descriptionToCheck The description to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":182,"author":{"gitId":"bljhty"},"content":" * @return True if the description matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":183,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":" private boolean matchesDescription(String descriptionToCheck) {","lastModifiedDate":"2023-10-24"},{"lineNumber":185,"author":{"gitId":"bljhty"},"content":" if (this.description !\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" String[] keywords \u003d this.description.split(\"\\\\s+\");","lastModifiedDate":"2023-10-23"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" for (String keyword : keywords) {","lastModifiedDate":"2023-10-23"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":" if (!descriptionToCheck.toLowerCase().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-10-24"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":" return false;","lastModifiedDate":"2023-10-24"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":191,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":193,"author":{"gitId":"bljhty"},"content":" return true;","lastModifiedDate":"2023-10-23"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":195,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":196,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"bljhty"},"content":" * Determines if a given expense matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"bljhty"},"content":" * @param e The expense to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"bljhty"},"content":" * @return True if the expense matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"bljhty"},"content":" private boolean matchesCriteria(Expense e) {","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"bljhty"},"content":" return matchesDate(e.getDate()) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":204,"author":{"gitId":"bljhty"},"content":" matchesCategory(e.getCategory()) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":205,"author":{"gitId":"bljhty"},"content":" matchesDescription(e.getDescription()) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":206,"author":{"gitId":"bljhty"},"content":" e.getAmount() !\u003d 0;","lastModifiedDate":"2023-10-29"},{"lineNumber":207,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":208,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":209,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":210,"author":{"gitId":"bljhty"},"content":" * Determines if a given income matches the criteria specified in the command.","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"bljhty"},"content":" * @param i The income to be checked.","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"bljhty"},"content":" * @return True if the income matches the criteria, false otherwise.","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"bljhty"},"content":" private boolean matchesCriteria(Income i) {","lastModifiedDate":"2023-10-24"},{"lineNumber":216,"author":{"gitId":"bljhty"},"content":" return matchesDate(i.getDate()) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":217,"author":{"gitId":"bljhty"},"content":" matchesCategory(i.getCategory()) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":218,"author":{"gitId":"bljhty"},"content":" matchesDescription(i.getDescription()) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":219,"author":{"gitId":"bljhty"},"content":" i.getAmount() !\u003d 0;","lastModifiedDate":"2023-10-29"},{"lineNumber":220,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":221,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":222,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":223,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"bljhty"},"content":" * Converts a date string into a LocalDate object. Supports full date strings and month names.","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"bljhty"},"content":" * @param dateString Date as a string in the format dd/MMM/yyyy or as a month name.","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"bljhty"},"content":" * @return LocalDate representation of the provided dateString.","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If the date string is in an invalid format.","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"bljhty"},"content":" private LocalDate parseDate(String dateString) throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":231,"author":{"gitId":"bljhty"},"content":" if (dateString \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":232,"author":{"gitId":"bljhty"},"content":" return null;","lastModifiedDate":"2023-10-23"},{"lineNumber":233,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":234,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":235,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatterDayMMM \u003d DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\");","lastModifiedDate":"2023-10-29"},{"lineNumber":236,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatterDayMM \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy\");","lastModifiedDate":"2023-10-29"},{"lineNumber":237,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatterMonthMM \u003d DateTimeFormatter.ofPattern(\"MM/yyyy\");","lastModifiedDate":"2023-10-29"},{"lineNumber":238,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatterMonthMMM \u003d DateTimeFormatter.ofPattern(\"MMM/yyyy\");","lastModifiedDate":"2023-10-29"},{"lineNumber":239,"author":{"gitId":"bljhty"},"content":" LocalDate parsedDate \u003d null;","lastModifiedDate":"2023-10-24"},{"lineNumber":240,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":241,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":242,"author":{"gitId":"bljhty"},"content":" parsedDate \u003d LocalDate.parse(dateString, formatterDayMMM);","lastModifiedDate":"2023-10-29"},{"lineNumber":243,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-10-29"},{"lineNumber":244,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-29"},{"lineNumber":245,"author":{"gitId":"bljhty"},"content":" parsedDate \u003d LocalDate.parse(dateString, formatterDayMM);","lastModifiedDate":"2023-10-29"},{"lineNumber":246,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-10-29"},{"lineNumber":247,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-29"},{"lineNumber":248,"author":{"gitId":"bljhty"},"content":" parsedDate \u003d YearMonth.parse(dateString, formatterMonthMM).atDay(1);","lastModifiedDate":"2023-10-29"},{"lineNumber":249,"author":{"gitId":"bljhty"},"content":" isSearchByMonth \u003d true;","lastModifiedDate":"2023-10-23"},{"lineNumber":250,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e3) {","lastModifiedDate":"2023-10-29"},{"lineNumber":251,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-29"},{"lineNumber":252,"author":{"gitId":"bljhty"},"content":" parsedDate \u003d YearMonth.parse(dateString, formatterMonthMMM).atDay(1);","lastModifiedDate":"2023-10-29"},{"lineNumber":253,"author":{"gitId":"bljhty"},"content":" isSearchByMonth \u003d true;","lastModifiedDate":"2023-10-29"},{"lineNumber":254,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e4) {","lastModifiedDate":"2023-10-29"},{"lineNumber":255,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Failed to parse date \" + dateString, e4);","lastModifiedDate":"2023-10-29"},{"lineNumber":256,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Invalid date format. \" +","lastModifiedDate":"2023-10-29"},{"lineNumber":257,"author":{"gitId":"bljhty"},"content":" \"Please use formats like 20/Oct/2023, 20/10/2023, 10/2023, or Oct/2023.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":258,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":259,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":260,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":261,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":262,"author":{"gitId":"bljhty"},"content":" return parsedDate;","lastModifiedDate":"2023-10-29"},{"lineNumber":263,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":264,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"bljhty":264}},{"path":"src/main/java/seedu/duke/commands/IncomeLister.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * Represents the command that when executed, lists all incomes.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * This class is a child class of the Command class.","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public class IncomeLister extends Commands {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(IncomeLister.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" private final ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" * Constructor for IncomeLister.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * @param incomes ArrayList of incomes","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" * @param ui Instance of Ui","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" public IncomeLister(ArrayList\u003cIncome\u003e incomes, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" assert incomes !\u003d null : \"incomes should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" assert ui !\u003d null : \"ui should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, (\"Initialised IncomeLister\"));","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" listIncomes();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" * This method lists all incomes.","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" // Updated method name to follow Java naming conventions","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" public void listIncomes() {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" if (incomes.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" System.out.println(\"You have no recorded incomes.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are your incomes:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" for (int i \u003d 0; i \u003c incomes.size(); i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" System.out.println((i + 1) + \". \" + incomes.get(i).toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, (\"Incomes listed successfully\"));","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":64}},{"path":"src/main/java/seedu/duke/commands/IncomeManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.parser.IncomeParser;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * Represents the class that manages the creation of a new income.","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" * This class serves as a blueprint for all specific income creation classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"public class IncomeManager extends Commands{","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" // Logger instance to log events and issues that occur during the execution of this class.","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(IncomeManager.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" private final String details;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" private Income newIncome;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" static{","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/IncomeManager.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" public IncomeManager(String details) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" assert details !\u003d null : \"details should not be null\"; // Ensure that details is not null","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" this.details \u003d details;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" * This method is used to execute the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" public void execute() throws KaChinnnngException {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d extractIncomeFields(details);","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" newIncome \u003d IncomeParser.parseIncome(incomeFields);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, \"successful parsing of income\"); // logging successful parsing of income","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" * This method returns the new income created.","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" * @return newIncome","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" public Income getNewIncome() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" return newIncome;","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" * This method extracts the fields of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" * @param details String containing the details of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" * @return incomeFields HashMap containing the fields of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" private HashMap\u003cString, String\u003e extractIncomeFields(String details) throws KaChinnnngException {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" assert details !\u003d null : \"details should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" // Split the details string based on the field keywords","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" String[] parts \u003d details.split(\"/de|/date|/amt\");","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" // Check if all fields are present in the string","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" if (parts.length !\u003d 4) {","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Missing or out-of-order fields detected in income details: \" + details);","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Expected fields `/description`, `/date`, and \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" \"`/amount` are missing or improperly formatted.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" // Populate the HashMap with extracted fields","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, parts[1].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, parts[2].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, parts[3].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" return incomeFields;","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":97}},{"path":"src/main/java/seedu/duke/commands/KaChinnnngException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":" * Represents the exception thrown when there is an error in the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"public class KaChinnnngException extends Exception{","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":" public KaChinnnngException(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":" super(message);","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":10}},{"path":"src/main/java/seedu/duke/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":" * The `ListCommand` class is responsible for displaying a list of income and expense records,","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":" * along with the total income, total expenses, and the total balance.","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":" * It extends the `Commands` class and is used to provide a summary of financial records to the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"public class ListCommand extends Commands {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" private Ui ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" private double totalIncome;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" private double totalExpenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" * Constructs a `ListCommand` object with the specified income and expense lists and a user interface.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" * @param incomes The list of income records to be displayed.","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" * @param expenses The list of expense records to be displayed.","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" * @param ui The user interface for displaying messages and financial records.","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" public ListCommand(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses, Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" this.incomes \u003d incomes;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" this.expenses \u003d expenses;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" totalIncome \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" totalExpenses \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" * Executes the `ListCommand` to display a summary of income and expense records,","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" * along with the total balance.","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" public void execute() {","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" if (incomes.isEmpty() \u0026\u0026 expenses.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"You do not have any records.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" // Print incomes","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" if (incomes.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"You have no recorded incomes.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Here are your incomes:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" for (int i \u003d 0; i \u003c incomes.size(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" System.out.println((i + 1) + \". \" + incomes.get(i).toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" totalIncome +\u003d incomes.get(i).getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" System.out.printf(\"Total income is: $%.2f.\\n\", totalIncome);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" // Print expenses","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" if (expenses.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"You have no recorded expenses.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" System.out.println(\"Here are your expenses:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" for (int i \u003d 0; i \u003c expenses.size(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" System.out.println((i + 1) + \". \" + expenses.get(i).toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" totalExpenses +\u003d expenses.get(i).getAmount();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" System.out.printf(\"Total expenses is: $%.2f.\\n\", totalExpenses);","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" System.out.printf(\"\\nTotal balance is: $%.2f.\\n\", totalIncome - totalExpenses);","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"limyuhching":73}},{"path":"src/main/java/seedu/duke/commands/UsageInstructions.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"public class UsageInstructions {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":" // Shows a message linking the user to the user guide of our app","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":" private final seedu.duke.ui.Ui ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":" * The `UsageInstructions` class provides usage instructions for the application,","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":" * including command formats and a link to the user guide.","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" public UsageInstructions(Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":" * Displays usage instructions for the application, including command formats and a link to the user guide.","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" public void getHelp(){","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" // Shows a message linking the user to the user guide of our app","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" System.out.println(\"You can access our user guide by \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" \"https://docs.google.com/document/d/1BOz_v4eYQ8y7Dje6Jm6nqymi9jmrsb9MAohLCL_sLvI/edit?usp\u003dsharing\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" // Displays the various commands that user can use including the respective formats of the commands","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Functions and their format:\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Adding an entry: add\\nFormat:\\n\" + \"Add expense /category /description /value\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" \"Add income /description /value\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Listing all entries: list\\nFormat:\\n\" + \"list\\n\" + \"list income\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" \"list expense\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Deleting an entry: delete\\nFormat:\\ndelete income [index_pos]\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" \"delete expense [index_pos]\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Check balance of income: balance\\nFormat:\\n\" + \"balance\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Exiting the program: exit\\nFormat:\\n\" + \"exit\");","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" ui.showLineDivider();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bljhty":30,"KenCheung18":7}},{"path":"src/main/java/seedu/duke/financialrecords/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":" * Implementation of the Expense class","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":" * Basic expense class inherits from FinancialRecord and does not include any additional attributes","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Attribute \"amount\" contains a negative double which will make it easier to tally up the net total at the end","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"public class Expense extends FinancialRecord {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" protected String category;","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" public Expense(String description, LocalDate date, double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" public String getCategory() {","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" return \"Expense: \" + getDescription() +","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":7,"Hongzhii":20}},{"path":"src/main/java/seedu/duke/financialrecords/FinancialRecord.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * Represents the abstract class for all financial records.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * This class serves as a blueprint for all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public abstract class FinancialRecord{","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" // Logger instance to log events and issues that occur during the execution of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FinancialRecord.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" protected String description;","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" protected LocalDate date;","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" protected double amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" * This method is used to create a new financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record creation classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" * @param description String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" * @param date LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" * @param amount double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" public FinancialRecord(String description, LocalDate date, double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" assert description !\u003d null : \"description should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" assert date !\u003d null : \"date should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" LOGGER.warning(\"Description is empty\");","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Description cannot be empty!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" if (amount \u003c 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" LOGGER.warning(\"Amount is negative\");","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Amount cannot be negative!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" if (date.isAfter(LocalDate.now())) {","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" LOGGER.warning(\"Date is in the future\");","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Date cannot be in the future!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" * This method is used to get the category of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" * @return String containing the category of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" public String getCategory() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" return \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" * This method is used to get the description of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" * @return String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" return description;","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * This method is used to get the date of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" * @return LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" public LocalDate getDate() {","lastModifiedDate":"2023-10-12"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" return date;","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" * This method is used to get the date of the financial record in a string format.","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" * @return String containing the date of the financial record in a string format","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" public String getDateString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\");","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" return date.format(formatter);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" * This method is used to get the amount of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" * @return double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" public double getAmount() {","lastModifiedDate":"2023-10-12"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" return amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" * This method is used to set the description of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" * @param description String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" public void setDescription(String description) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" assert description !\u003d null : \"description should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" if (description.trim().isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Description cannot be empty!\");","lastModifiedDate":"2023-10-12"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-12"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" * This method is used to set the date of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" * @param date LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":" public void setDate(LocalDate date) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" assert date !\u003d null : \"date should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-12"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" * This method is used to set the amount of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" * @param amount double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" public void setAmount(double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" assert amount \u003e\u003d 0 : \"amount should not be negative\";","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-12"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" * This method is used to get the category of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" * @return String containing the category of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" return \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":152}},{"path":"src/main/java/seedu/duke/financialrecords/Food.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Food class that inherits from expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * Represents food expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class Food extends Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private MealType mealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" * Food class constructor","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * @param description","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" * @param date","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param amount","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param mealType","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public Food(String description, LocalDate date, double amount, MealType mealType) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" this.category \u003d \"food\";","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" this.mealType \u003d mealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" * Returns meal type","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" public MealType getMealType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" return mealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" * Returns a string that contains all the information on the expense record","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" return \"Food Expense (\" + getMealType() + \"): \" + getDescription() +","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"bljhty":1,"Hongzhii":45}},{"path":"src/main/java/seedu/duke/financialrecords/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * Implementation of the Income class","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * Basic income class inherits from FinancialRecord and does not include any additional attributes","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public class Income extends FinancialRecord {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" // Logger instance to log events and issues that occur during the execution of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(Income.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/Income.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * This method is used to create a new financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record creation classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" * @param description String containing the description of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" * @param date LocalDate containing the date of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" * @param amount double containing the amount of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" public Income(String description, LocalDate date, double amount) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO,(\"Income created with description: \" +","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" description + \" date: \" + date + \" amount: \" + amount));","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" * This method is used to get the category of the financial record.","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" * This method is used by all specific financial record classes in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" * @return String containing the category of the financial record","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" return \"Income: \" + getDescription() + ","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" \" | Date: \" + getDateString()+ \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":64}},{"path":"src/main/java/seedu/duke/financialrecords/Transport.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Transport class that inherits from expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * Represents transportation expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class Transport extends Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private TransportationType transportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" * Transport class constructor","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * @param description","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" * @param date","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param amount","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param transportationType","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public Transport(String description, LocalDate date, double amount,","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" TransportationType transportationType) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" this.transportationType \u003d transportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" this.category \u003d \"Transport\";","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * Returns transportation type","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" public TransportationType getTransportationType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" return transportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" * Returns a string that contains all the information on the expense record","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" return \"Transportation Expense (\" + getTransportationType() + \"): \" + getDescription() +","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"bljhty":1,"Hongzhii":46}},{"path":"src/main/java/seedu/duke/financialrecords/Utilities.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":" * Utilities class that inherits from expense.","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":" * Represents utility expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"public class Utilities extends Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":" private UtilityType utilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":" * Utilities class constructor","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":" * @param description","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":" * @param date","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" * @param amount","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" * @param utilityType","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" * @throws KaChinnnngException","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public Utilities(String description, LocalDate date, double amount,","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" UtilityType utilityType) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":" super(description, date, amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" this.utilityType \u003d utilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" this.category \u003d \"Utilities\";","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" * Returns utility type","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" public UtilityType getUtilityType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" return utilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" * Returns a string that contains all the information on the expense record","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" return \"Utilities Expense(\" + getUtilityType() + \"): \" + getDescription() +","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" \" | Date: \" + getDateString() + \" | Amount: $\" + String.format(\"%.2f\", getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"bljhty":1,"Hongzhii":46}},{"path":"src/main/java/seedu/duke/financialrecords/expensetypes/MealType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords.expensetypes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Enum class to represent meal types.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"public enum MealType {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":" UNDEFINED, BREAKFAST, LUNCH, DINNER","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":8}},{"path":"src/main/java/seedu/duke/financialrecords/expensetypes/TransportationType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords.expensetypes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Enum class that represents all transportation types.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"public enum TransportationType {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":" UNDEFINED, TRAIN, BUS, TAXI, FUEL","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":8}},{"path":"src/main/java/seedu/duke/financialrecords/expensetypes/UtilityType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.financialrecords.expensetypes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":" * Enum class that represents all utility types.","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"public enum UtilityType {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":" UNDEFINED, WATER, ELECTRICITY, GAS","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Hongzhii":8}},{"path":"src/main/java/seedu/duke/parser/ExpenseParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Hongzhii"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Hongzhii"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Hongzhii"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Hongzhii"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Hongzhii"},"content":"import java.time.format.ResolverStyle;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Hongzhii"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Hongzhii"},"content":"public class ExpenseParser {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Hongzhii"},"content":" public static final String CATEGORY_FIELD \u003d \"ca\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Hongzhii"},"content":" public static final String TYPE_FIELD \u003d \"ty\";","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"Hongzhii"},"content":" public static final String DESCRIPTION_FIELD \u003d \"de\";","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Hongzhii"},"content":" public static final String DATE_FIELD \u003d \"da\";","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Hongzhii"},"content":" public static final String AMOUNT_FIELD \u003d \"am\";","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Hongzhii"},"content":" public static final String INDEX_FIELD \u003d \"in\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Hongzhii"},"content":" public static LocalDate parseDate(String expenseDateString) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Hongzhii"},"content":" LocalDate expenseDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/uuuu\")","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Hongzhii"},"content":" .withResolverStyle(ResolverStyle.STRICT);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Hongzhii"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Hongzhii"},"content":" expenseDate \u003d LocalDate.parse(expenseDateString, formatter);","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Hongzhii"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid date in the format dd/MM/yyyydon\");","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Hongzhii"},"content":" if (expenseDate.isAfter(LocalDate.now())) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a date that is not in the future\");","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Hongzhii"},"content":" return expenseDate;","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Hongzhii"},"content":" public static Expense parseExpense(HashMap\u003cString, String\u003e argumentsByField) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Hongzhii"},"content":" if (!argumentsByField.containsKey(CATEGORY_FIELD) ||","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(TYPE_FIELD) ||","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(DESCRIPTION_FIELD) ||","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(DATE_FIELD) ||","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Hongzhii"},"content":" !argumentsByField.containsKey(AMOUNT_FIELD)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Missing fields detected\");","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Hongzhii"},"content":" String expenseCategoryString \u003d argumentsByField.get(CATEGORY_FIELD).toLowerCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Hongzhii"},"content":" String expenseTypeString \u003d argumentsByField.get(TYPE_FIELD).toLowerCase();","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"Hongzhii"},"content":" String expenseDescriptionString \u003d argumentsByField.get(DESCRIPTION_FIELD);","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Hongzhii"},"content":" String expenseDateString \u003d argumentsByField.get(DATE_FIELD);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Hongzhii"},"content":" String expenseAmountString \u003d argumentsByField.get(AMOUNT_FIELD);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Hongzhii"},"content":" LocalDate expenseDate \u003d parseDate(expenseDateString);","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Hongzhii"},"content":" double expenseAmount;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Hongzhii"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Hongzhii"},"content":" expenseAmount \u003d Double.parseDouble(expenseAmountString);","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Hongzhii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a valid amount\");","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Hongzhii"},"content":" if (expenseAmount \u003e 999999.99 || expenseAmount \u003c\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Expense amount must be between $0.01 and $999999.99\");","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Hongzhii"},"content":" if (expenseCategoryString.equals(\"food\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Hongzhii"},"content":" if (expenseTypeString.equals(\"breakfast\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.BREAKFAST);","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"lunch\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.LUNCH);","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"dinner\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.DINNER);","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"Hongzhii"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"Hongzhii"},"content":" return new Food(expenseDescriptionString, expenseDate, expenseAmount, MealType.UNDEFINED);","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseCategoryString.equals(\"transport\")){","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Hongzhii"},"content":" if (expenseTypeString.equals(\"train\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"Hongzhii"},"content":" TransportationType.TRAIN);","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"bus\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"Hongzhii"},"content":" TransportationType.BUS);","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"taxi\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"Hongzhii"},"content":" TransportationType.TAXI);","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"fuel\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"Hongzhii"},"content":" TransportationType.FUEL);","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"Hongzhii"},"content":" } else {","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"Hongzhii"},"content":" return new Transport(expenseDescriptionString, expenseDate, expenseAmount,","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"Hongzhii"},"content":" TransportationType.UNDEFINED);","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" } else if (expenseCategoryString.equals(\"utilities\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"Hongzhii"},"content":" if (expenseTypeString.equals(\"water\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.WATER);","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"electricity\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.ELECTRICITY);","lastModifiedDate":"2023-10-26"},{"lineNumber":100,"author":{"gitId":"Hongzhii"},"content":" } else if (expenseTypeString.equals(\"gas\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.GAS);","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"Hongzhii"},"content":" } else{","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"Hongzhii"},"content":" return new Utilities(expenseDescriptionString, expenseDate, expenseAmount, UtilityType.UNDEFINED);","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid category\");","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Hongzhii"},"content":" public static int getIndex(HashMap\u003cString, String\u003e argumentsByFields) throws KaChinnnngException {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Hongzhii"},"content":" if (!argumentsByFields.containsKey(INDEX_FIELD)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Missing index field detected\");","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Hongzhii"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Hongzhii"},"content":" return Integer.parseInt(argumentsByFields.get(INDEX_FIELD));","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Hongzhii"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Hongzhii"},"content":" throw new KaChinnnngException(\"Please enter a valid index\");","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Hongzhii"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"bljhty":4,"Hongzhii":116}},{"path":"src/main/java/seedu/duke/parser/FindParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"public class FindParser {","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" * Parses the find command input.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" * @param fullCommand The full command string input by the user.","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" * @return An array of Strings containing the parsed parameters in the order: TYPE, CATEGORY, DESCRIPTION, DATE.","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException If the command format is invalid.","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public static String[] parseFindCommand(String fullCommand) throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" String[] tokens \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" String[] parsedParameters \u003d new String[4]; // To store TYPE, CATEGORY, DESCRIPTION, DATE","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" String[] validParameters \u003d {\"/t\", \"/cat\", \"/de\", \"/date\"}; // List of valid parameters","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" for (String token : tokens) {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" if (token.startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" boolean isValidParam \u003d false;","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" for (String validParam : validParameters) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" if (token.equals(validParam)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" isValidParam \u003d true;","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" if (!isValidParam) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Unrecognized parameter \\\"\" + token + \"\\\". \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" \"Please refer to the help guide for valid parameters.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/type\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please use /t instead of /type for specifying the type.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/category\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please use /cat instead of /category for specifying the category.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/description\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please use /de instead of /description for specifying the description.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" if (!fullCommand.contains(\"/t\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The /t TYPE field is mandatory.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" int typeIndex \u003d indexOf(tokens, \"/t\");","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" if (typeIndex \u003d\u003d tokens.length - 1 || tokens[typeIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /t TYPE cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" parsedParameters[0] \u003d tokens[typeIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" if(\"income\".equalsIgnoreCase(parsedParameters[0])) {","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/cat\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The /cat CATEGORY field is not applicable for income.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/cat\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" int categoryIndex \u003d indexOf(tokens, \"/cat\");","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" if (categoryIndex \u003d\u003d tokens.length - 1 || tokens[categoryIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /c CATEGORY cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" parsedParameters[1] \u003d tokens[categoryIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/de\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" int descriptionIndex \u003d indexOf(tokens, \"/de\");","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" if (descriptionIndex \u003d\u003d tokens.length - 1 || tokens[descriptionIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /de DESCRIPTION cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" parsedParameters[2] \u003d tokens[descriptionIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" if (fullCommand.contains(\"/date\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" int dateIndex \u003d indexOf(tokens, \"/date\");","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" if (dateIndex \u003d\u003d tokens.length - 1 || tokens[dateIndex + 1].startsWith(\"/\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"The value for /da DATE cannot be empty.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" parsedParameters[3] \u003d tokens[dateIndex + 1];","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" // Check that at least one optional field is provided","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" if (parsedParameters[1] \u003d\u003d null \u0026\u0026 parsedParameters[2] \u003d\u003d null \u0026\u0026 parsedParameters[3] \u003d\u003d null) {","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"At least one of the optional fields [/c CATEGORY], \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" \"[/de DESCRIPTION], [/da DATE] must be provided.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" return parsedParameters;","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" * Helper method to find the index of a specific string in an array.","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" * @param array The array to search.","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" * @param value The string value to find.","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" * @return The index of the value in the array, or -1 if not found.","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" private static int indexOf(String[] array, String value) {","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" for (int i \u003d 0; i \u003c array.length; i++) {","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" if (array[i].equals(value)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" return i;","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" return -1;","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"bljhty":108}},{"path":"src/main/java/seedu/duke/parser/IncomeParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.time.format.ResolverStyle;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" * Represents the parser for the Income class.","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" * This class serves to parse the user input into a format that the Income class can understand","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"public class IncomeParser {","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" public static final String DESCRIPTION_FIELD \u003d \"de\";","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" public static final String DATE_FIELD \u003d \"da\";","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" public static final String AMOUNT_FIELD \u003d \"am\";","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" public static final String INDEX_FIELD \u003d \"in\";","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(IncomeParser.class.getName());","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/IncomeParser.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" * This method is used to parse the date of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeParser class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeManager class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" * @param incomeDateString String containing the date of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" * @return incomeDate LocalDate containing the date of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" public static LocalDate parseDate(String incomeDateString) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" assert incomeDateString !\u003d null : \"incomeDateString should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" LocalDate incomeDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd/MM/uuuu\")","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" .withResolverStyle(ResolverStyle.STRICT);","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" incomeDate \u003d LocalDate.parse(incomeDateString, formatter);","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid date format\" + incomeDateString, e);","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid date in the format dd/MM/yyyy\");","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" if (incomeDate.isAfter(LocalDate.now())) {","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Date is in the future\" + incomeDateString);","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a date that is not in the future\");","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" return incomeDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" * This method is used to parse the fields of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeManager class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" * @param argumentsByField HashMap containing the description, date, and amount of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" * @return Income object created from the provided fields","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" public static Income parseIncome(HashMap\u003cString, String\u003e argumentsByField) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" if (!argumentsByField.containsKey(DESCRIPTION_FIELD) ||","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" !argumentsByField.containsKey(DATE_FIELD) ||","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" !argumentsByField.containsKey(AMOUNT_FIELD)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Missing fields detected\");","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" String incomeDescriptionString \u003d argumentsByField.get(DESCRIPTION_FIELD);","lastModifiedDate":"2023-10-12"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" String incomeDateString \u003d argumentsByField.get(DATE_FIELD);","lastModifiedDate":"2023-10-12"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" String incomeAmountString \u003d argumentsByField.get(AMOUNT_FIELD);","lastModifiedDate":"2023-10-12"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" LocalDate incomeDate \u003d parseDate(incomeDateString);","lastModifiedDate":"2023-10-12"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" double incomeAmount;","lastModifiedDate":"2023-10-12"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" incomeAmount \u003d Double.parseDouble(incomeAmountString);","lastModifiedDate":"2023-10-12"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid amount format\" + incomeAmountString, e);","lastModifiedDate":"2023-10-19"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid amount\");","lastModifiedDate":"2023-10-12"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" if (incomeAmount \u003e 999999.99 || incomeAmount \u003c\u003d 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.WARNING, \"Invalid amount\" + incomeAmountString);","lastModifiedDate":"2023-10-19"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Income amount must be between $0.01 and $999999.99\");","lastModifiedDate":"2023-10-12"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" return new Income(incomeDescriptionString, incomeDate, incomeAmount);","lastModifiedDate":"2023-10-12"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" * This method is used to get the index of the income.","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" * This method is used by the IncomeDeleter class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" * @param argumentsByFields HashMap containing the index of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" * @return index int containing the index of the income","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is an error in the command","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" public static int getIndex(HashMap\u003cString, String\u003e argumentsByFields) throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" assert argumentsByFields !\u003d null : \"argumentsByFields should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" if (!argumentsByFields.containsKey(INDEX_FIELD)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Missing index field detected\");","lastModifiedDate":"2023-10-12"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" int index;","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" index \u003d Integer.parseInt(argumentsByFields.get(INDEX_FIELD));","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid index\");","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" if (index \u003c\u003d 0) {","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Please enter a valid index\");","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" return index;","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":138}},{"path":"src/main/java/seedu/duke/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.io.File;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"/*","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" * parser class to parse user input","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"public class Parser {","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" //private static final Logger LOGGER \u003d Logger.getLogger(Parser.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(Parser.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" static {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" File dir \u003d new File(\"logs\");","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" if (!dir.mkdirs()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"Failed to create directory \" + dir.getAbsolutePath());","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" FileHandler fh \u003d new FileHandler(\"logs/Parser.log\", true);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" fh.setFormatter(formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" LOGGER.addHandler(fh);","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" LOGGER.setLevel(Level.ALL);","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" LOGGER.setUseParentHandlers(false);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.SEVERE, \"Error creating log file\", e);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * This method is used to parse the user input.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This method is used by the Main class in the application","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" * @param fullCommand String containing the user input","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" * @return String containing the command to be executed","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" public static String parse(String fullCommand) {","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" assert fullCommand !\u003d null : \"fullCommand should not be null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" String trimmedCommand \u003d fullCommand.trim();","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" String commandLowerCase \u003d trimmedCommand.toLowerCase();","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO, (\"Parsing user input:\") + fullCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" String resultCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" if (commandLowerCase.equals(\"exit\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"exit\";","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" } else if (commandLowerCase.startsWith(\"add income\")) {","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"add_income\";","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" } else if (commandLowerCase.equals(\"list income\")) {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"list_income\";","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"Hongzhii"},"content":" } else if (commandLowerCase.startsWith(\"add expense\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"add_expense\";","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"Hongzhii"},"content":" } else if (commandLowerCase.equals((\"list expense\"))) {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"list_expense\";","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.equals(\"help\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"help\";","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.equals(\"list\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"list\";","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"delete income\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"delete_income\";","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"delete expense\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"delete_expense\";","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.equals(\"balance\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"balance\";","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" } else if (commandLowerCase.startsWith(\"find\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"find\";","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.startsWith(\"clear incomes\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"KenCheung18"},"content":" resultCommand \u003d \"clear_incomes\";","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.startsWith(\"clear expenses\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"KenCheung18"},"content":" resultCommand \u003d \"clear_expenses\";","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"KenCheung18"},"content":" } else if (commandLowerCase.startsWith(\"clear all\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"KenCheung18"},"content":" resultCommand \u003d \"clear_all\";","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"edit income\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"limyuhching"},"content":" resultCommand \u003d \"edit_income\";","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"limyuhching"},"content":" } else if (commandLowerCase.startsWith(\"edit expense\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"limyuhching"},"content":" resultCommand \u003d \"edit_expense\";","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" resultCommand \u003d \"invalid\";","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" LOGGER.log(Level.INFO , (\"Parsed command: \") + resultCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" return resultCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"limyuhching":7,"bljhty":77,"Hongzhii":2,"KenCheung18":8}},{"path":"src/main/java/seedu/duke/storage/GetFromTxt.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.storage;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"import java.io.File;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":" * The GetFromTxt class is responsible for reading financial records data from a text file.","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" * It parses the contents of the file and populates two ArrayLists: one for Incomes and one for Expenses.","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" * This class handles exceptions for file creation errors, parsing errors, and other issues that may arise","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" * when reading data from the file.","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":"public class GetFromTxt {","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" private static final String AMOUNT_NOT_SUPPORT_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" \"Amount field from this line is not supported from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" private static final String DATE_TIME_FORMAT_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" \"Date time format incorrect on this line from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" private static final String FILE_CREATION_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":" \"Something went wrong while creating the file from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"KenCheung18"},"content":" private static final String INDEX_OUT_OF_BOUND_FROM_FILE_ERROR \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"KenCheung18"},"content":" \"Details missed on this line from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" private static final String NUMBER_FROM_FILE_INCORRECT \u003d","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" \"The expense type is incorrect on this line from storage file \";","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"KenCheung18"},"content":" private final File file;","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"KenCheung18"},"content":" * Construct a new object of the GetFromTxt class with the provided file path.","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"KenCheung18"},"content":" * @param path The path to the text file containing financial records data.","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"KenCheung18"},"content":" public GetFromTxt(String path) {","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"KenCheung18"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"KenCheung18"},"content":" * Reads financial records data from the text file and add to the corresponding ArrayLists","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":" * with Income and Expense objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The ArrayList to store Income objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The ArrayList to store Expense objects.","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":" * @throws FileNotFoundException If the file specified by the path cannot be found.","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"KenCheung18"},"content":" public void getFromTextFile(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses) throws FileNotFoundException {","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"KenCheung18"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"KenCheung18"},"content":" return; // If there is no such file in the directory, create the file and return without reading data.","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"KenCheung18"},"content":" System.out.println(FILE_CREATION_ERROR);","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"KenCheung18"},"content":" Scanner s \u003d new Scanner(file); // Create a Scanner using the File as the source","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"KenCheung18"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"KenCheung18"},"content":" String textLine \u003d s.nextLine();","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"KenCheung18"},"content":" // Parse the data from the text line","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"KenCheung18"},"content":" int expenseType \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"KenCheung18"},"content":" String commandFromFile \u003d textLine.split(\" \\\\| \")[0];","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"KenCheung18"},"content":" String descriptionFromFile \u003d textLine.split(\" \\\\| \")[1];","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"KenCheung18"},"content":" double amountFromFile \u003d Double. parseDouble(textLine.split(\" \\\\| \")[2]);","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"KenCheung18"},"content":" LocalDate dateFromFile \u003d LocalDate.parse(textLine.split(\" \\\\| \")[3]);","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"KenCheung18"},"content":" // Check for valid amount range","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"KenCheung18"},"content":" if (amountFromFile \u003e 999999.99 || amountFromFile \u003c\u003d 0) {","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"KenCheung18"},"content":" throw new KaChinnnngException(\"Expense amount must be between $0.01 and $999999.99\");","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"KenCheung18"},"content":" if (!commandFromFile.equals(\"I\")){","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"KenCheung18"},"content":" expenseType \u003d Integer.parseInt(textLine.split(\" \\\\| \")[4]);","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"KenCheung18"},"content":" // Create appropriate objects based on the commandFromFile","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"KenCheung18"},"content":" switch (commandFromFile) {","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"KenCheung18"},"content":" case \"I\":","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"KenCheung18"},"content":" incomes.add(new Income(descriptionFromFile, dateFromFile, amountFromFile));","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"KenCheung18"},"content":" case \"EF\":","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"KenCheung18"},"content":" expenses.add(new Food(descriptionFromFile, dateFromFile,","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"KenCheung18"},"content":" amountFromFile, MealType.values()[expenseType]));","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"KenCheung18"},"content":" case \"ET\":","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"KenCheung18"},"content":" expenses.add(new Transport(descriptionFromFile, dateFromFile,","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"KenCheung18"},"content":" amountFromFile, TransportationType.values()[expenseType]));","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"KenCheung18"},"content":" case \"EU\":","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"KenCheung18"},"content":" expenses.add(new Utilities(descriptionFromFile, dateFromFile,","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"KenCheung18"},"content":" amountFromFile, UtilityType.values()[expenseType]));","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"KenCheung18"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"KenCheung18"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"KenCheung18"},"content":" System.out.println(\"The format of this line is incorrect \" + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"KenCheung18"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"KenCheung18"},"content":" System.out.println(INDEX_OUT_OF_BOUND_FROM_FILE_ERROR + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"KenCheung18"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"KenCheung18"},"content":" System.out.println(AMOUNT_NOT_SUPPORT_ERROR + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"KenCheung18"},"content":" } catch (DateTimeParseException e){","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"KenCheung18"},"content":" System.out.println(DATE_TIME_FORMAT_ERROR + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"KenCheung18"},"content":" } catch(NumberFormatException e){","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"KenCheung18"},"content":" System.out.println(NUMBER_FROM_FILE_INCORRECT + \"\\\"\" + textLine + \"\\\"\");","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":118}},{"path":"src/main/java/seedu/duke/storage/SaveToTxt.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"KenCheung18"},"content":"package seedu.duke.storage;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"KenCheung18"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"KenCheung18"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"KenCheung18"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"KenCheung18"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"KenCheung18"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"KenCheung18"},"content":" * The SaveToTxt class is responsible for saving financial records data to a text file.","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"KenCheung18"},"content":" * It can save both Income and Expense objects to the specified file.","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"KenCheung18"},"content":" * This class handles exceptions for IO errors that may occur during file operations.","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"KenCheung18"},"content":"public class SaveToTxt {","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"KenCheung18"},"content":" private static final String IO_ERROR_MESSAGE \u003d \"An error occurred while saving tasks to the file.\";","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"KenCheung18"},"content":" private final String path;","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"KenCheung18"},"content":" * Construct a new object of the SaveToTxt class with the file path.","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"KenCheung18"},"content":" * @param path The path to the text file where data will be saved.","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"KenCheung18"},"content":" public SaveToTxt(String path) {","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"KenCheung18"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"KenCheung18"},"content":" * Saves both Income and Expense objects to the specified text file.","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The ArrayList of Income objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The ArrayList of Expense objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"KenCheung18"},"content":" public void saveIncomeAndExpense(ArrayList\u003cIncome\u003e incomes, ArrayList\u003cExpense\u003e expenses){","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"KenCheung18"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"KenCheung18"},"content":" saveIncomeToTextFile(incomes);","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"KenCheung18"},"content":" saveExpenseToTextFile(expenses);","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"KenCheung18"},"content":" System.out.println(IO_ERROR_MESSAGE);","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"KenCheung18"},"content":" * Saves Income objects to the text file. Each Income object is represented as a line in the txt file.","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"KenCheung18"},"content":" * @param incomes The ArrayList of Income objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"KenCheung18"},"content":" * @throws IOException If an IO error occurs during the file write operation.","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"KenCheung18"},"content":" public void saveIncomeToTextFile(ArrayList\u003cIncome\u003e incomes) throws IOException {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"KenCheung18"},"content":" try (FileWriter fw \u003d new FileWriter(path)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"KenCheung18"},"content":" for (Income income : incomes) {","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"KenCheung18"},"content":" String incomeDescription \u003d income.getDescription();","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"KenCheung18"},"content":" String incomeDate \u003d String.valueOf(income.getDate());","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"KenCheung18"},"content":" String incomeAmount \u003d String.valueOf(income.getAmount());","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"KenCheung18"},"content":" String textToAdd \u003d \"I\" + \" | \" + incomeDescription + \" | \" + incomeAmount + \" | \" + incomeDate + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"KenCheung18"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"KenCheung18"},"content":" System.out.println(IO_ERROR_MESSAGE);","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"KenCheung18"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"KenCheung18"},"content":" * Saves Expense objects to the text file. Each Expense object is represented as a line in the file,","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"KenCheung18"},"content":" * and the type of Expense (Food, Transport, or Utilities) is specified in the line.","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"KenCheung18"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"KenCheung18"},"content":" * @param expenses The ArrayList of Expense objects to save.","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"KenCheung18"},"content":" * @throws IOException If an IO error occurs during the file write operation.","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"KenCheung18"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"KenCheung18"},"content":" public void saveExpenseToTextFile(ArrayList\u003cExpense\u003e expenses) throws IOException{","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"KenCheung18"},"content":" try (FileWriter fw \u003d new FileWriter(path, true)) {","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"KenCheung18"},"content":" for (Expense expense : expenses) {","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"KenCheung18"},"content":" String textToAdd \u003d \"\";","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"KenCheung18"},"content":" String expenseDescription \u003d expense.getDescription();","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"KenCheung18"},"content":" String expenseDate \u003d String.valueOf(expense.getDate());;","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"KenCheung18"},"content":" String expenseAmount \u003d String.valueOf(expense.getAmount());","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"KenCheung18"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"KenCheung18"},"content":" // Determine the type of Expense and format the line accordingly","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"KenCheung18"},"content":" if (expense.getClass() \u003d\u003d Food.class) {","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"KenCheung18"},"content":" textToAdd \u003d \"EF\" + \" | \" + expenseDescription + \" | \" + expenseAmount + \" | \"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"KenCheung18"},"content":" + expenseDate + \" | \" + ((Food) expense).getMealType().ordinal() + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"KenCheung18"},"content":" } else if (expense.getClass() \u003d\u003d Transport.class) {","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"KenCheung18"},"content":" textToAdd \u003d \"ET\" + \" | \" + expenseDescription + \" | \" + expenseAmount + \" | \"","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"KenCheung18"},"content":" + expenseDate + \" | \" + ((Transport) expense).getTransportationType().ordinal() + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"KenCheung18"},"content":" } else if (expense.getClass() \u003d\u003d Utilities.class) {","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"KenCheung18"},"content":" textToAdd \u003d \"EU\" + \" | \" + expenseDescription + \" | \" + expenseAmount + \" | \"","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"KenCheung18"},"content":" + expenseDate + \" | \" + ((Utilities) expense).getUtilityType().ordinal() + \"\\n\";","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"KenCheung18"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"KenCheung18"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"KenCheung18"},"content":" System.out.println(IO_ERROR_MESSAGE);","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"KenCheung18"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"KenCheung18"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"KenCheung18":98}},{"path":"src/main/java/seedu/duke/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"import java.util.List;","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"Hongzhii"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" * This class handles the user interface of the program.","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"public class Ui {","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" private static final String lineDivider \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public Scanner scanner;","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" * Constructor for Ui.","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" public Ui() {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" * This method reads the command input by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" * @return String containing the command input by the user","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if there is no input provided by the user","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" public String readCommand() throws KaChinnnngException {","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" if (scanner.hasNextLine()) {","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" throw new KaChinnnngException(\"No input provided by the user.\");","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * This method prints the line divider.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" public static void showLineDivider() {","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-11"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" * Prints the welcome message when the program starts.","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" public static void printWelcomeMessage() {","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Welcome to KaChinnnngggg! How may i assist you today?\");","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" * Prints the goodbye message when the program ends.","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" public void printGoodbyeMessage() {","lastModifiedDate":"2023-10-11"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" System.out.println(lineDivider);","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" * prints the message when the user inputs his income","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" * @param income Income object created from the provided fields","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" public static void printIncomeAddedMessage(Income income) {","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Got it. I\u0027ve added this income:\\n\" + income.toString());","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * Prints a message indicating the start of the income list display.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" public void printListIncomeMessage() {","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are your incomes:\");","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Hongzhii"},"content":" public void printExpenseAddedMessage(Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"Got it. I\u0027ve added this expense:\\n\" + expense.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"limyuhching"},"content":" showLineDivider();","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"Hongzhii"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"Hongzhii"},"content":" public void printListExpenseMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"Hongzhii"},"content":" System.out.println(\"Here are your expenses:\");","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"Hongzhii"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" public void showMatchingIncomes(List\u003cIncome\u003e matchingIncomes) {","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" if(matchingIncomes.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" System.out.println(\"No matching incomes found.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are the matching incomes in your list:\");","lastModifiedDate":"2023-10-23"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" for (Income income : matchingIncomes) {","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" System.out.println(income.toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" public void showMatchingExpenses(List\u003cExpense\u003e matchingExpenses) {","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" if (matchingExpenses.isEmpty()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" System.out.println(\"No matching expenses found.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" System.out.println(\"Here are the matching expenses in your list:\");","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" for (Expense expense : matchingExpenses) {","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" System.out.println(expense.toString());","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"limyuhching":5,"bljhty":101,"Hongzhii":9}},{"path":"src/test/java/seedu/duke/commands/BalanceTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * Tests for the {@link Balance} class.","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" * This test class provides test cases to check the calculation and reporting","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" * of financial balance between income and expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"public class BalanceTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * Sets up the test fixture.","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" * Called before every test case method.","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" public void setup() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" incomes.add(new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" incomes.add(new Income(\"Bonus\", LocalDate.of(2023, 10, 15), 1000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" expenses.add(new Expense(\"Rent\", LocalDate.of(2023, 10, 5), 2000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" expenses.add(new Expense(\"Groceries\", LocalDate.of(2023, 10, 7), 100.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with both income and expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly subtracts expenses from income.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" public void testGetBalance_withBothIncomeAndExpenses_returnsCorrectDifference() {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(incomes, expenses);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" assertEquals(3900.0, balance.getBalance());","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with no records.","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly returns 0.","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" public void testNoRecords() {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(new ArrayList\u003c\u003e(), new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" assertEquals(0, balance.getBalance(),","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" \"Balance should be 0 when no records are present.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with no expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly returns a positive value equal to income.","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" public void testGetBalance_withNoExpenses_returnsIncomeValue()throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cIncome\u003e incomesOnly \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" incomesOnly.add(new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(incomesOnly, new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" assertEquals(5000.0, balance.getBalance(),","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" \"Balance should equal sum of all incomes when no expenses are present.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" * Test the {@link Balance#getBalance()} method with no incomes.","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * This test case checks if the balance calculation correctly returns a negative value equal to expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" public void testGetBalance_withNoIncomes_returnsNegativeExpenseValue()throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" ArrayList\u003cExpense\u003e expensesOnly \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" expensesOnly.add(new Expense(\"Rent\", LocalDate.of(2023, 10, 5), 2000.0));","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" Balance balance \u003d new Balance(new ArrayList\u003c\u003e(), expensesOnly);","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" assertEquals(-2000.0, balance.getBalance(),","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" \"Balance should be negative sum of all expenses when no incomes are present.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":85}},{"path":"src/test/java/seedu/duke/commands/DeleteExpenseCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * This class contains JUnit tests for the DeleteExpenseCommand class.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":"public class DeleteExpenseCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" private DeleteExpenseCommand deleteExpenseCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" private Ui ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" public void setUp() {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" deleteExpenseCommand \u003d new DeleteExpenseCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with valid input. The expense should be deleted.","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_expenseDeleted() throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" Expense expense \u003d new Expense(\"Lunch\", LocalDate.now().minusDays(1), 20.00);","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" expenses.add(expense);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" // Act","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" // Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" assertEquals(0, expenses.size());","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with missing arguments. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" public void testExecute_missingArgument_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense\";","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with an invalid index. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteExpenseCommand with a non-existent expense index.","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" * It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"limyuhching"},"content":" public void testExecute_nonExistentExpenseIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete expense 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteExpenseCommand.execute(expenses, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"limyuhching":82}},{"path":"src/test/java/seedu/duke/commands/DeleteIncomeCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"/**","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":" * This class contains JUnit tests for the DeleteIncomeCommand class.","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":"public class DeleteIncomeCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" private DeleteIncomeCommand deleteIncomeCommand;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" private Ui ui;","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" public void setUp() {","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" deleteIncomeCommand \u003d new DeleteIncomeCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with valid input. The income should be deleted.","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_incomeDeleted() throws KaChinnnngException {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" Income income \u003d new Income(\"Salary\",","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" incomes.add(income);","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" // Act","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" // Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" assertEquals(0, incomes.size());","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with missing arguments. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" public void testExecute_missingArgument_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income\";","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with an invalid index. It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"limyuhching"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"limyuhching"},"content":" * Test the execution of the DeleteIncomeCommand with a non-existent income index.","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"limyuhching"},"content":" * It should throw a KaChinnnngException.","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"limyuhching"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"limyuhching"},"content":" public void testExecute_nonExistentIncomeIndex_exceptionThrown() {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"limyuhching"},"content":" // Arrange","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"limyuhching"},"content":" String fullCommand \u003d \"delete income 1\";","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"limyuhching"},"content":" // Act and Assert","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e deleteIncomeCommand.execute(incomes, fullCommand, ui));","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"limyuhching":83}},{"path":"src/test/java/seedu/duke/commands/EditExpenseCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"public class EditExpenseCommandTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cExpense\u003e expenses;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" private String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" public void setUp() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" // Initialize the expenses and fullCommand for testing","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" expenses.add(new Expense(\"Rent\", LocalDate.of(2023, 10, 5), 2000.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" expenses.add(new Expense(\"Groceries\", LocalDate.of(2023, 10, 7), 100.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"Hongzhii"},"content":" fullCommand \u003d \"edit expense 3 expense /cat food /type lunch /de chicken sandwich /date 01/10/2023 /amt 10.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" EditExpenseCommand editExpenseCommand \u003d new EditExpenseCommand(expenses, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" // This test checks if the execute method throws an exception when the index is out of bounds","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" editExpenseCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" });","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_expenseEdited() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"Hongzhii"},"content":" fullCommand \u003d \"edit expense 1 expense /cat food /type lunch /de chicken rice /date 01/10/2023 /amt 10.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" EditExpenseCommand editExpenseCommand \u003d new EditExpenseCommand(expenses, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":" // Test if the execute method changes the expense and prints the changes","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e editExpenseCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":" // Verify if the expense was updated correctly","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" Expense updatedExpense \u003d expenses.get(0);","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"Hongzhii"},"content":" assertEquals(\"Food Expense (LUNCH): chicken rice | Date: 01/Oct/2023 | Amount: $10.00\",","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"Hongzhii"},"content":" updatedExpense.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidExpense_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" // Test if execute method throws a KaChinnnngException for an invalid command","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit expense 1 invalid expense command\";","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" EditExpenseCommand editExpenseCommand \u003d new EditExpenseCommand(expenses, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e editExpenseCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":54,"Hongzhii":4}},{"path":"src/test/java/seedu/duke/commands/EditIncomeCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"limyuhching"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"limyuhching"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"limyuhching"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"limyuhching"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"limyuhching"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"limyuhching"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"limyuhching"},"content":"public class EditIncomeCommandTest {","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"limyuhching"},"content":" private EditIncomeCommand editIncomeCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"limyuhching"},"content":" private ArrayList\u003cIncome\u003e incomes;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"limyuhching"},"content":" private String fullCommand;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"limyuhching"},"content":" @BeforeEach","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"limyuhching"},"content":" public void setUp() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"limyuhching"},"content":" // Initialize the incomes and fullCommand for testing","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"limyuhching"},"content":" incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"limyuhching"},"content":" incomes.add(new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"limyuhching"},"content":" incomes.add(new Income(\"Bonus\", LocalDate.of(2023, 10, 15), 1000.0));","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIndex_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit income 3 income /de salary for October /date 01/10/2023 /amt 5000.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand \u003d new EditIncomeCommand(incomes, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"limyuhching"},"content":" // This test checks if the execute method throws an exception when the index is out of bounds","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand.execute();","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"limyuhching"},"content":" });","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"limyuhching"},"content":" public void testExecute_validInput_incomeEdited() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit income 1 income /de salary for October /date 01/10/2023 /amt 5000.00\";","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand \u003d new EditIncomeCommand(incomes, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"limyuhching"},"content":" // Test if the execute method changes the income and prints the changes","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"limyuhching"},"content":" assertDoesNotThrow(() -\u003e editIncomeCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"limyuhching"},"content":" // Verify if the income was updated correctly","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"limyuhching"},"content":" Income updatedincome \u003d incomes.get(0);","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"limyuhching"},"content":" assertEquals(\"Income: salary for October | Date: 01/Oct/2023 | Amount: $5000.00\",","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"limyuhching"},"content":" updatedincome.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"limyuhching"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"limyuhching"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"limyuhching"},"content":" public void testExecute_invalidIncome_exceptionThrown() throws KaChinnnngException {","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"limyuhching"},"content":" // Test if execute method throws a KaChinnnngException for an invalid command","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"limyuhching"},"content":" fullCommand \u003d \"edit income 1 invalid income command\";","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"limyuhching"},"content":" editIncomeCommand \u003d new EditIncomeCommand(incomes, fullCommand);","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"limyuhching"},"content":" assertThrows(KaChinnnngException.class, () -\u003e editIncomeCommand.execute());","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"limyuhching"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"limyuhching"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"limyuhching":59}},{"path":"src/test/java/seedu/duke/commands/FindCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.expensetypes.MealType;","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.expensetypes.TransportationType;","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.expensetypes.UtilityType;","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"import seedu.duke.ui.MockUi;","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":"public class FindCommandTest {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cIncome\u003e testIncomes;","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" private ArrayList\u003cExpense\u003e testExpenses;","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" private MockUi mockUi;","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" @BeforeEach","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" void setUp() {","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" testIncomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" testExpenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" mockUi \u003d new MockUi(); // Assuming MockUi has a parameterless constructor.","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandExpenseByCategory() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", \"Food\",","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" null, null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandExpenseByDescription() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" \"Burger\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandExpenseByDate() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" null, \"10/Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandExpenseByMonth() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" // Adding multiple expenses in October","lastModifiedDate":"2023-10-29"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" Food foodExpense1 \u003d new Food(\"Burger\", LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" Food foodExpense2 \u003d new Food(\"Pizza\", LocalDate.of(2023, 10, 15), 8.0, MealType.DINNER);","lastModifiedDate":"2023-10-29"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" Food foodExpense3 \u003d new Food(\"Sandwich\", LocalDate.of(2023, 10, 28), 3.0, MealType.BREAKFAST);","lastModifiedDate":"2023-10-29"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" // Adding an expense from another month for control","lastModifiedDate":"2023-10-29"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" Food foodExpenseOutsideMonth \u003d new Food(\"Salad\", LocalDate.of(2023, 9, 30), 4.0, MealType.DINNER);","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense1);","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense2);","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense3);","lastModifiedDate":"2023-10-29"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpenseOutsideMonth);","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null, null, \"Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00, \"","lastModifiedDate":"2023-10-29"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" + \"Food Expense (DINNER): Pizza | Date: 15/Oct/2023 | Amount: $8.00, \"","lastModifiedDate":"2023-10-29"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" + \"Food Expense (BREAKFAST): Sandwich | Date: 28/Oct/2023 | Amount: $3.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandExpenseByDate2() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" null, \"10/10/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" void testMultipleMatchingExpenses() throws Exception{","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" Food foodExpense1 \u003d new Food (\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" Food foodExpense2 \u003d new Food (\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023,10,11), 5.0, MealType.DINNER);","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense1);","lastModifiedDate":"2023-10-29"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense2);","lastModifiedDate":"2023-10-29"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" \"Burger\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00, \"","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" + \"Food Expense (DINNER): Burger | Date: 11/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" void testNoMatchingExpenses() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" \"NonexistentItem\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" assertTrue(mockUi.getPrintedMessages().contains(\"No matching expenses found.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" void testInvalidDateFormat() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\", LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" null, \"20231010\", mockUi); // Invalid date format","lastModifiedDate":"2023-10-29"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Invalid date format.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":" void testNullValues() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\", LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":168,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":169,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":170,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses,","lastModifiedDate":"2023-10-29"},{"lineNumber":171,"author":{"gitId":"bljhty"},"content":" null, null, null, null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":172,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":173,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":174,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandIncomeByDescription() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" Income income \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income);","lastModifiedDate":"2023-10-29"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"income\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":182,"author":{"gitId":"bljhty"},"content":" \"Salary\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":183,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":185,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Income: Salary | Date: 10/Oct/2023 | Amount: $5000.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowIncomes().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":" void testValidFindCommandIncomeByDate() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":191,"author":{"gitId":"bljhty"},"content":" Income income \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income);","lastModifiedDate":"2023-10-29"},{"lineNumber":193,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"income\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":195,"author":{"gitId":"bljhty"},"content":" null, \"10/Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":196,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":197,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":198,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Income: Salary | Date: 10/Oct/2023 | Amount: $5000.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":199,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowIncomes().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":200,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":201,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":202,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":203,"author":{"gitId":"bljhty"},"content":" void testMultipleIncomeMatches() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":204,"author":{"gitId":"bljhty"},"content":" Income income1 \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":205,"author":{"gitId":"bljhty"},"content":" Income income2 \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 11), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":206,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income1);","lastModifiedDate":"2023-10-29"},{"lineNumber":207,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income2);","lastModifiedDate":"2023-10-29"},{"lineNumber":208,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":209,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"income\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":210,"author":{"gitId":"bljhty"},"content":" \"Salary\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":211,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":212,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":213,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Income: Salary | Date: 10/Oct/2023 | Amount: $5000.00, \"","lastModifiedDate":"2023-10-29"},{"lineNumber":214,"author":{"gitId":"bljhty"},"content":" + \"Income: Salary | Date: 11/Oct/2023 | Amount: $5000.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":215,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowIncomes().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":216,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":217,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":218,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":219,"author":{"gitId":"bljhty"},"content":" void testNoMatchingIncomes() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":220,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"income\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":221,"author":{"gitId":"bljhty"},"content":" \"NonexistentItem\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":222,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":223,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":224,"author":{"gitId":"bljhty"},"content":" assertTrue(mockUi.getPrintedMessages().contains(\"No matching incomes found.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":225,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":226,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":227,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":228,"author":{"gitId":"bljhty"},"content":" void testIncomesByMonth() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":229,"author":{"gitId":"bljhty"},"content":" Income income1 \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":230,"author":{"gitId":"bljhty"},"content":" Income income2 \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 11), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":231,"author":{"gitId":"bljhty"},"content":" Income income3 \u003d new Income(\"Salary\", LocalDate.of(2023, 9, 11), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":232,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income1);","lastModifiedDate":"2023-10-29"},{"lineNumber":233,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income2);","lastModifiedDate":"2023-10-29"},{"lineNumber":234,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income3);","lastModifiedDate":"2023-10-29"},{"lineNumber":235,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":236,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"income\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":237,"author":{"gitId":"bljhty"},"content":" null, \"Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":238,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":239,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":240,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Income: Salary | Date: 10/Oct/2023 | Amount: $5000.00, \"","lastModifiedDate":"2023-10-29"},{"lineNumber":241,"author":{"gitId":"bljhty"},"content":" + \"Income: Salary | Date: 11/Oct/2023 | Amount: $5000.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":242,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowIncomes().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":243,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":244,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":245,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":246,"author":{"gitId":"bljhty"},"content":" void testIncomeFutureDate() {","lastModifiedDate":"2023-10-29"},{"lineNumber":247,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":248,"author":{"gitId":"bljhty"},"content":" Income futureIncome \u003d new Income(\"Bonus\", LocalDate.of(2025, 10, 10), 7000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":249,"author":{"gitId":"bljhty"},"content":" testIncomes.add(futureIncome);","lastModifiedDate":"2023-10-29"},{"lineNumber":250,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":251,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":252,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Date cannot be in the future!\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":253,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":254,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":255,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":256,"author":{"gitId":"bljhty"},"content":" void testFindExpenseByDescriptionAndDate() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":257,"author":{"gitId":"bljhty"},"content":" Food foodExpense1 \u003d new Food(\"Burger\", LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":258,"author":{"gitId":"bljhty"},"content":" Food foodExpense2 \u003d new Food(\"Burger\", LocalDate.of(2023, 10, 11), 5.0, MealType.DINNER);","lastModifiedDate":"2023-10-29"},{"lineNumber":259,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense1);","lastModifiedDate":"2023-10-29"},{"lineNumber":260,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense2);","lastModifiedDate":"2023-10-29"},{"lineNumber":261,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":262,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":263,"author":{"gitId":"bljhty"},"content":" \"Burger\", \"10/Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":264,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":265,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":266,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":267,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":268,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":269,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":270,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":271,"author":{"gitId":"bljhty"},"content":" void testFindExpenseByDescriptionAndCategory() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":272,"author":{"gitId":"bljhty"},"content":" Food foodExpense1 \u003d new Food(\"Burger\", LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":273,"author":{"gitId":"bljhty"},"content":" Food foodExpense2 \u003d new Food(\"Pizza\", LocalDate.of(2023, 10, 11), 5.0, MealType.DINNER);","lastModifiedDate":"2023-10-29"},{"lineNumber":274,"author":{"gitId":"bljhty"},"content":" Transport transportExpense \u003d new Transport(\"Bus\",","lastModifiedDate":"2023-10-29"},{"lineNumber":275,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, TransportationType.BUS);","lastModifiedDate":"2023-10-29"},{"lineNumber":276,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense1);","lastModifiedDate":"2023-10-29"},{"lineNumber":277,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense2);","lastModifiedDate":"2023-10-29"},{"lineNumber":278,"author":{"gitId":"bljhty"},"content":" testExpenses.add(transportExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":279,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":280,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", \"Food\",","lastModifiedDate":"2023-10-29"},{"lineNumber":281,"author":{"gitId":"bljhty"},"content":" \"Burger\", null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":282,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":283,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":284,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Food Expense (LUNCH): Burger | Date: 10/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":285,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":286,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":287,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":288,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":289,"author":{"gitId":"bljhty"},"content":" void testFindExpenseByDateAndCategory() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":290,"author":{"gitId":"bljhty"},"content":" Transport transportExpense1 \u003d new Transport(\"Bus\",","lastModifiedDate":"2023-10-29"},{"lineNumber":291,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, TransportationType.BUS);","lastModifiedDate":"2023-10-29"},{"lineNumber":292,"author":{"gitId":"bljhty"},"content":" Utilities utilitiesExpense \u003d new Utilities(\"Electricity\",","lastModifiedDate":"2023-10-29"},{"lineNumber":293,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, UtilityType.WATER);","lastModifiedDate":"2023-10-29"},{"lineNumber":294,"author":{"gitId":"bljhty"},"content":" Transport transportExpense2 \u003d new Transport(\"Bus\",","lastModifiedDate":"2023-10-29"},{"lineNumber":295,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, TransportationType.TAXI);","lastModifiedDate":"2023-10-29"},{"lineNumber":296,"author":{"gitId":"bljhty"},"content":" testExpenses.add(transportExpense1);","lastModifiedDate":"2023-10-29"},{"lineNumber":297,"author":{"gitId":"bljhty"},"content":" testExpenses.add(utilitiesExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":298,"author":{"gitId":"bljhty"},"content":" testExpenses.add(transportExpense2);","lastModifiedDate":"2023-10-29"},{"lineNumber":299,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":300,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", \"Transport\",","lastModifiedDate":"2023-10-29"},{"lineNumber":301,"author":{"gitId":"bljhty"},"content":" null, \"11/Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":302,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":303,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":304,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Transportation Expense (BUS): Bus | Date: 11/Oct/2023 | Amount: $5.00, \"","lastModifiedDate":"2023-10-29"},{"lineNumber":305,"author":{"gitId":"bljhty"},"content":" + \"Transportation Expense (TAXI): Bus | Date: 11/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":306,"author":{"gitId":"bljhty"},"content":" assertTrue(mockUi.getShowExpenses().contains(expectedOutput));","lastModifiedDate":"2023-10-29"},{"lineNumber":307,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":308,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":309,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":310,"author":{"gitId":"bljhty"},"content":" void testFindExpenseByDescriptionAndDateAndCategory() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":311,"author":{"gitId":"bljhty"},"content":" Utilities utilitiesExpense1 \u003d new Utilities(\"Electricity\",","lastModifiedDate":"2023-10-29"},{"lineNumber":312,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, UtilityType.ELECTRICITY);","lastModifiedDate":"2023-10-29"},{"lineNumber":313,"author":{"gitId":"bljhty"},"content":" Utilities utilitiesExpense2 \u003d new Utilities(\"Water\",","lastModifiedDate":"2023-10-29"},{"lineNumber":314,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, UtilityType.WATER);","lastModifiedDate":"2023-10-29"},{"lineNumber":315,"author":{"gitId":"bljhty"},"content":" Food foodExpense \u003d new Food(\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":316,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 11), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":317,"author":{"gitId":"bljhty"},"content":" testExpenses.add(utilitiesExpense1);","lastModifiedDate":"2023-10-29"},{"lineNumber":318,"author":{"gitId":"bljhty"},"content":" testExpenses.add(utilitiesExpense2);","lastModifiedDate":"2023-10-29"},{"lineNumber":319,"author":{"gitId":"bljhty"},"content":" testExpenses.add(foodExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":320,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":321,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"expense\", \"Utilities\",","lastModifiedDate":"2023-10-29"},{"lineNumber":322,"author":{"gitId":"bljhty"},"content":" \"Electricity\", \"11/Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":323,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":324,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":325,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Utilities Expense(ELECTRICITY): Electricity | Date: 11/Oct/2023 | Amount: $5.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":326,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowExpenses().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":327,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":328,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":329,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":330,"author":{"gitId":"bljhty"},"content":" void testIncomeByDescriptionAndDate() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":331,"author":{"gitId":"bljhty"},"content":" Income income1 \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 10), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":332,"author":{"gitId":"bljhty"},"content":" Income income2 \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 11), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":333,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income1);","lastModifiedDate":"2023-10-29"},{"lineNumber":334,"author":{"gitId":"bljhty"},"content":" testIncomes.add(income2);","lastModifiedDate":"2023-10-29"},{"lineNumber":335,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":336,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses, \"income\", null,","lastModifiedDate":"2023-10-29"},{"lineNumber":337,"author":{"gitId":"bljhty"},"content":" \"Salary\", \"10/Oct/2023\", mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":338,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":339,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":340,"author":{"gitId":"bljhty"},"content":" String expectedOutput \u003d \"[Income: Salary | Date: 10/Oct/2023 | Amount: $5000.00]\";","lastModifiedDate":"2023-10-29"},{"lineNumber":341,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedOutput, mockUi.getShowIncomes().get(0));","lastModifiedDate":"2023-10-29"},{"lineNumber":342,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":343,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":344,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":345,"author":{"gitId":"bljhty"},"content":" void testNegativeIncomeAmount() {","lastModifiedDate":"2023-10-29"},{"lineNumber":346,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":347,"author":{"gitId":"bljhty"},"content":" Income negativeIncome \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 10), -5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":348,"author":{"gitId":"bljhty"},"content":" testIncomes.add(negativeIncome);","lastModifiedDate":"2023-10-29"},{"lineNumber":349,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":350,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":351,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Amount cannot be negative!\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":352,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":353,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":354,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":355,"author":{"gitId":"bljhty"},"content":" void testNegativeExpenseAmount() {","lastModifiedDate":"2023-10-29"},{"lineNumber":356,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":357,"author":{"gitId":"bljhty"},"content":" Food negativeExpense \u003d new Food(\"Burger\",","lastModifiedDate":"2023-10-29"},{"lineNumber":358,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), -5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":359,"author":{"gitId":"bljhty"},"content":" testExpenses.add(negativeExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":360,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":361,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":362,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Amount cannot be negative!\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":363,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":364,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":365,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":366,"author":{"gitId":"bljhty"},"content":" void testEmptyIncomeDescription() {","lastModifiedDate":"2023-10-29"},{"lineNumber":367,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":368,"author":{"gitId":"bljhty"},"content":" Income emptyDescriptionIncome \u003d new Income(\"\",","lastModifiedDate":"2023-10-29"},{"lineNumber":369,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5000.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":370,"author":{"gitId":"bljhty"},"content":" testIncomes.add(emptyDescriptionIncome);","lastModifiedDate":"2023-10-29"},{"lineNumber":371,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":372,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":373,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Description cannot be empty!\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":374,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":375,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":376,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":377,"author":{"gitId":"bljhty"},"content":" void testEmptyExpenseDescription() {","lastModifiedDate":"2023-10-29"},{"lineNumber":378,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":379,"author":{"gitId":"bljhty"},"content":" Food emptyDescriptionExpense \u003d new Food(\"\",","lastModifiedDate":"2023-10-29"},{"lineNumber":380,"author":{"gitId":"bljhty"},"content":" LocalDate.of(2023, 10, 10), 5.0, MealType.LUNCH);","lastModifiedDate":"2023-10-29"},{"lineNumber":381,"author":{"gitId":"bljhty"},"content":" testExpenses.add(emptyDescriptionExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":382,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":383,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":384,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Description cannot be empty!\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":385,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":386,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":387,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":388,"author":{"gitId":"bljhty"},"content":" void testInvalidExpenseCategory() {","lastModifiedDate":"2023-10-29"},{"lineNumber":389,"author":{"gitId":"bljhty"},"content":" Exception exception \u003d assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-29"},{"lineNumber":390,"author":{"gitId":"bljhty"},"content":" // Assuming \u0027Gaming\u0027 is not a valid category in your application","lastModifiedDate":"2023-10-29"},{"lineNumber":391,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses,","lastModifiedDate":"2023-10-29"},{"lineNumber":392,"author":{"gitId":"bljhty"},"content":" \"expense\", \"Gaming\", null, null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":393,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":394,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-29"},{"lineNumber":395,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":396,"author":{"gitId":"bljhty"},"content":" assertTrue(exception.getMessage().contains(\"Invalid expense category provided! Allowed categories are: \"));","lastModifiedDate":"2023-10-29"},{"lineNumber":397,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":398,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":399,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":400,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":401,"author":{"gitId":"bljhty"},"content":" void testFindCommandWithZeroAmountExpense() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":402,"author":{"gitId":"bljhty"},"content":" Expense zeroAmountExpense \u003d new Expense(\"Zero Amount Expense\", LocalDate.now(), 0.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":403,"author":{"gitId":"bljhty"},"content":" testExpenses.add(zeroAmountExpense);","lastModifiedDate":"2023-10-29"},{"lineNumber":404,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":405,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses,","lastModifiedDate":"2023-10-29"},{"lineNumber":406,"author":{"gitId":"bljhty"},"content":" \"expense\", \"Food\", null, null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":407,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":408,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":409,"author":{"gitId":"bljhty"},"content":" assertFalse(mockUi.getShowExpenses().contains(\"Zero Amount Expense\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":410,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":411,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":412,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":413,"author":{"gitId":"bljhty"},"content":" void testFindCommandWithZeroIncome() throws Exception {","lastModifiedDate":"2023-10-29"},{"lineNumber":414,"author":{"gitId":"bljhty"},"content":" Income zeroAmountIncome \u003d new Income(\"Zero Amount Income\", LocalDate.now(), 0.0);","lastModifiedDate":"2023-10-29"},{"lineNumber":415,"author":{"gitId":"bljhty"},"content":" testIncomes.add(zeroAmountIncome);","lastModifiedDate":"2023-10-29"},{"lineNumber":416,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":417,"author":{"gitId":"bljhty"},"content":" FindCommand findCommand \u003d new FindCommand(testIncomes, testExpenses,","lastModifiedDate":"2023-10-29"},{"lineNumber":418,"author":{"gitId":"bljhty"},"content":" \"income\", null, null, null, mockUi);","lastModifiedDate":"2023-10-29"},{"lineNumber":419,"author":{"gitId":"bljhty"},"content":" findCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":420,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":421,"author":{"gitId":"bljhty"},"content":" assertFalse(mockUi.getShowIncomes().contains(\"Zero Amount Income\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":422,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":423,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":424,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"bljhty":424}},{"path":"src/test/java/seedu/duke/financialrecords/ExpenseTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * Test suite for the {@link Expense} class.","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" * This class contains unit tests to validate the behavior of the Expense class and ensure","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" * correctness in the representation and management of financial expenses.","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"public class ExpenseTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" private Expense expense;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" * Initializes common test fixtures before each test execution.","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" void setUp() {","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" expense \u003d new Expense(\"Lunch\", LocalDate.now().minusDays(1), 20.00);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" } catch (KaChinnnngException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" fail(\"Setup failed due to exception: \" + e.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" * Tests if an exception is thrown when the description of an Expense object is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" void testExpenseDescription_notEmpty(){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e new Expense(\"\", LocalDate.now(), 20.00));","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" * Tests if an exception is thrown when the amount of an Expense object is negative.","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" void testExpenseAmount_notNegative(){","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e new Expense(\"Lunch\", LocalDate.now(), -20.00));","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" * Tests if an exception is thrown when the date of an Expense object is in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" void testExpenseDate_notFuture(){","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e new Expense(\"Lunch\", LocalDate.now().plusDays(1), 20.00));","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" * Tests if the correct description of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" void getDescription() {","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Lunch\", expense.getDescription());","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":" * Tests if the correct date of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" void getDate() {","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.now().minusDays(1), expense.getDate());","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" * Tests if the correct amount of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" void getAmount() {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" assertEquals(20.00, expense.getAmount());","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" * Tests if the correct date string of the Expense object is returned.","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" void getDateString() {","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\")),","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" expense.getDateString());","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" * Tests the string representation of the Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" void testToString() {","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Expense: Lunch | Date: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern(\"dd/MMM/yyyy\")) +","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" \" | Amount: $20.00\",","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" expense.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":101}},{"path":"src/test/java/seedu/duke/financialrecords/IncomeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.financialrecords;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"public class IncomeTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" public void testIncomeCreation() throws KaChinnnngException {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" Income income \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" assertNotNull(income);","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Salary\", income.getDescription());","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.of(2023, 10, 12), income.getDate());","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" assertEquals(5000.00, income.getAmount());","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" public void testToString() throws KaChinnnngException{","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" Income income \u003d new Income(\"Salary\", LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" String expected \u003d \"Income: Salary | Date: 12/Oct/2023 | Amount: $5000.00\";","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" assertEquals(expected, income.toString());","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" public void testInvalidDescription() {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" new Income(\"\", LocalDate.of(2023, 10, 12), 5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" public void testInvalidAmount() {","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" new Income(\"Salary\", LocalDate.of(2023, 10, 12), -5000.00);","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" });","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"bljhty":42}},{"path":"src/test/java/seedu/duke/parser/ExpenseParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Food;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Transport;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Utilities;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"public class ExpenseParserTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if the date is parsed correctly.","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if the parsed date is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" void parseDate_validDate_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" LocalDate expectedDate \u003d LocalDate.of(2020, 02, 29);","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" LocalDate actualDate \u003d ExpenseParser.parseDate(\"29/02/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" assertEquals(expectedDate, actualDate);","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid day.","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" void parseDate_invalidDay_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseDate(\"32/02/2020\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid year.","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" void parseDate_invalidDate_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseDate(\"10/10/20202\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in ExpenseParser","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse a date that is in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" void parseDate_futureDate_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseDate(\"10/10/3021\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" * It verifies if the food category are correctly parsed into an Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException for invalid scenarios","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" void testParseExpense_foodCategory_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, \"lunch\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" assertTrue(ExpenseParser.parseExpense(expenseFields) instanceof Food);","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":" * It verifies if the transport category are correctly parsed into an Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException for invalid scenarios","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" void testParseExpense_transportCategory_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"transport\");","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, \"bus\");","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"from nus to changi\");","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"1.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" assertTrue(ExpenseParser.parseExpense(expenseFields) instanceof Transport);","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" * It verifies if the utilities category are correctly parsed into an Expense object.","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException for invalid scenarios","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" void testParseExpense_utilitiesCategory_success() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"utilities\");","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.TYPE_FIELD, \"electricity\");","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"Hongzhii"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"air con bill\");","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"50.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" assertTrue(ExpenseParser.parseExpense(expenseFields) instanceof Utilities);","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for an unrecognized category.","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" void testParseExpense_invalidCategory_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"invalid\");","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for missing amount fields.","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" void testParseExpense_missingAmountField_success() {","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for missing description fields.","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" void testParseExpense_missingDescriptionFields_success(){","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" * This method tests the parseExpense method in ExpenseParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception for missing date fields.","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":" void testParseExpense_missingDateField_success(){","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"3.50\");","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"bljhty"},"content":" * Tests if the getIndex method in ExpenseParser throws an exception for a valid index format.","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"bljhty"},"content":" void testGetIndexValid() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.INDEX_FIELD, \"1\");","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"bljhty"},"content":" assertEquals(1, ExpenseParser.getIndex(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"bljhty"},"content":" * Tests if the getIndex method in ExpenseParser throws an exception for an invalid index format.","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"bljhty"},"content":" void testGetIndexInvalid() {","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.INDEX_FIELD, \"a\");","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.getIndex(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the provided amount exceeds the limit.","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"bljhty"},"content":" void testParseAmount_aboveLimit_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":199,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"1000000.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the category field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"bljhty"},"content":" void testParseCategory_emptyString_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"9999.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the description field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"bljhty"},"content":" void testParseDescription_emptyString_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"9999.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the date field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"bljhty"},"content":" void testParseDate_emptyString_exceptionThrown(){","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"9999.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"bljhty"},"content":" * Tests if the expense parsing method throws an exception when the amount field is empty.","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"bljhty"},"content":" void testParseAmount_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e expenseFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.CATEGORY_FIELD, \"food\");","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DESCRIPTION_FIELD, \"Chicken Rice\");","lastModifiedDate":"2023-10-18"},{"lineNumber":258,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.DATE_FIELD, \"12/10/2020\");","lastModifiedDate":"2023-10-18"},{"lineNumber":259,"author":{"gitId":"bljhty"},"content":" expenseFields.put(ExpenseParser.AMOUNT_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":260,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":261,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e ExpenseParser.parseExpense(expenseFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":262,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"bljhty":258,"Hongzhii":5}},{"path":"src/test/java/seedu/duke/parser/IncomeParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.commands.KaChinnnngException;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" * JUnit test class for IncomeParser","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":"public class IncomeParserTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" * This method tests the parseIncome method in IncomeParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" * It verifies if the incomeFields are correctly parsed into an Income object.","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":" public void testParseIncome() throws KaChinnnngException {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"5000.00\");","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" Income income \u003d IncomeParser.parseIncome(incomeFields);","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" assertEquals(\"Salary\", income.getDescription());","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.of(2023, 10, 12), income.getDate());","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":" assertEquals(5000.00, income.getAmount());","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if the date is parsed correctly.","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" * @throws KaChinnnngException if the parsed date is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"bljhty"},"content":" public void testParseDate_validDate() throws KaChinnnngException {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"bljhty"},"content":" LocalDate result \u003d IncomeParser.parseDate(\"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"bljhty"},"content":" assertEquals(LocalDate.of(2023, 10, 12), result);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid date.","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"bljhty"},"content":" * @see KaChinnnngException if the parsed date is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"bljhty"},"content":" public void testParseDate_invalidDate() {","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseDate(\"12/13/2023\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse a date that is in the future.","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"bljhty"},"content":" public void testParseDate_futureDate() {","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseDate(\"12/10/2025\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"bljhty"},"content":" * This method tests the parseDate method in IncomeParser.","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"bljhty"},"content":" * Specifically, it tests if a KaChinnnngException is thrown when trying to parse an invalid day.","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"bljhty"},"content":" void testParseDate_invalidDay(){","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseDate(\"32/10/2023\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"bljhty"},"content":" * This method tests the getIndex method in IncomeParser when trying to get index from an empty input.","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":83,"author":{"gitId":"bljhty"},"content":" public void testGetIndex_missingField() {","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e inputMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":85,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.getIndex(inputMap));","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs amount that is above the limit.","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"bljhty"},"content":" void testParseAmount_aboveLimit_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"1000000000.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an empty string for description.","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"bljhty"},"content":" void testParseDescription_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"10.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an empty string for date.","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"bljhty"},"content":" void testParseDate_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"10.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an empty string for amount.","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"bljhty"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"bljhty"},"content":" void testParseAmount_emptyString_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e incomeFields \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DESCRIPTION_FIELD, \"Salary\");","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.DATE_FIELD, \"12/10/2023\");","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"bljhty"},"content":" incomeFields.put(IncomeParser.AMOUNT_FIELD, \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.parseIncome(incomeFields));","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an invalid index.","lastModifiedDate":"2023-10-18"},{"lineNumber":146,"author":{"gitId":"bljhty"},"content":" * Specifically negative index","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"bljhty"},"content":" void testGetIndex_negativeIndex_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e inputMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"bljhty"},"content":" inputMap.put(IncomeParser.INDEX_FIELD, \"-1\");","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.getIndex(inputMap));","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"bljhty"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"bljhty"},"content":" * This method tests the behaviour when user inputs an invalid index.","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"bljhty"},"content":" * Specifically zero index","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"bljhty"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"bljhty"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"bljhty"},"content":" void testGetIndex_zeroIndex_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"bljhty"},"content":" HashMap\u003cString, String\u003e inputMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"bljhty"},"content":" inputMap.put(IncomeParser.INDEX_FIELD, \"0\");","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"bljhty"},"content":" assertThrows(KaChinnnngException.class, () -\u003e IncomeParser.getIndex(inputMap));","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":167,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"bljhty":167}},{"path":"src/test/java/seedu/duke/ui/MockUi.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bljhty"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Income;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"bljhty"},"content":"import seedu.duke.financialrecords.Expense;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"bljhty"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"bljhty"},"content":"import java.util.List;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"bljhty"},"content":"public class MockUi extends Ui{","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"bljhty"},"content":" private List\u003cString\u003e printedMessages \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"bljhty"},"content":" private List\u003cString\u003e showIncomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"bljhty"},"content":" private List\u003cString\u003e showExpenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"bljhty"},"content":" public void printMessage(String message) {","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"bljhty"},"content":" printedMessages.add(message);","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"bljhty"},"content":" public void showMatchingIncomes(List\u003cIncome\u003e matchingIncomes) {","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"bljhty"},"content":" showIncomes.add(matchingIncomes.toString());","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"bljhty"},"content":" @Override","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"bljhty"},"content":" public void showMatchingExpenses(List\u003cExpense\u003e matchingExpenses) {","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"bljhty"},"content":" showExpenses.add(matchingExpenses.toString());","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"bljhty"},"content":" public List\u003cString\u003e getPrintedMessages() {","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"bljhty"},"content":" return printedMessages;","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"bljhty"},"content":" public List\u003cString\u003e getShowIncomes() {","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"bljhty"},"content":" return showIncomes;","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"bljhty"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"bljhty"},"content":" public List\u003cString\u003e getShowExpenses() {","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"bljhty"},"content":" return showExpenses;","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"bljhty"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"bljhty"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"bljhty":40}}] diff --git a/AY2324S1-CS2113-T18-3_tp_master/commits.json b/AY2324S1-CS2113-T18-3_tp_master/commits.json index b673e0b..03874bf 100644 --- a/AY2324S1-CS2113-T18-3_tp_master/commits.json +++ b/AY2324S1-CS2113-T18-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"limyuhching":[{"date":"2023-10-12","commitResults":[{"hash":"7f15c328582d32d223482ccd59a5852f9ad70029","isMergeCommit":false,"messageTitle":"Add Lim Yuh Ching to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"47e7e2474c8c6f73387b9dcd7047da3c77cb619e","isMergeCommit":false,"messageTitle":"Add ListCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":59,"deletions":5}}},{"hash":"e176e64efb5cc74bcf08757e82020ae7bc9c656f","isMergeCommit":false,"messageTitle":"Add list option to parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4}}},{"hash":"8a99e6a7dc43fd86423cf7046827ac5f7611f9fa","isMergeCommit":false,"messageTitle":"Add Ui to ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":2}}},{"hash":"54d292397684060fd65c2389c300dea0cb712504","isMergeCommit":true,"messageTitle":"Merge branch \u0027Yuh.Ching-feature-list\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ea3da5f550569c65319ff4911fe9fed728a97e64","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/limyuhching/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"fd506a278351582ab91f8f4b974b1db63765cfac","isMergeCommit":false,"messageTitle":"Change imports from .* to individual class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":7}}},{"hash":"9c3010789b6b2bc4f285263b77d6e56b0ce6988f","isMergeCommit":false,"messageTitle":"Add DeleteIncomeCommand and DeleteExpenseCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":1}}},{"hash":"ecdcbbe69b47d928a759d2cb81efe93cfa538c7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027Yuh.Ching-feature-delete\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"3ae858c7a01d9a61a3e500510b79b26b23fe6a5c","isMergeCommit":false,"messageTitle":"Minor bug fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"69a33bbf033086dc0c4f8e2d314dff052227afd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"939ddd821d709edc8b7e0f4c6e53bb8648e6a8d8","isMergeCommit":false,"messageTitle":"Remove duplicate import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"e7ee368b163df8c82a81ae2738e2f745f44b9846","isMergeCommit":false,"messageTitle":"Bug fixes - wrong indexing for delete command - inconsistent line divider","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":12}}},{"hash":"192a5b32be615e963b03f1bb584aa7eec161324d","isMergeCommit":true,"messageTitle":"Merge pull request #57 from limyuhching/master","messageBody":"Add list and delete feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"470e50657798752e0cea1cf681a1286ead745f62","isMergeCommit":false,"messageTitle":"Add JavaDoc and JUnit test for DeleteIncomeCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":2},"test-code":{"insertions":81,"deletions":0}}},{"hash":"4b8b9e883d87a6a56300486eb6a1e12affb1f7c1","isMergeCommit":false,"messageTitle":"Changed Ui output of ListCommand and DeleteExpenseCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":6}}},{"hash":"8585f39452170b750700c20306dd0bda7ef4eb7e","isMergeCommit":false,"messageTitle":"Debug style error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":3}}},{"hash":"6230bbe0816a74140c927ef9d79550a43ef2e0ec","isMergeCommit":false,"messageTitle":"Add JUnit and JavaDoc to DeleteExpenseCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":9},"test-code":{"insertions":82,"deletions":0}}},{"hash":"4db459d6ae7b6aeeb759152a49a039f92392198d","isMergeCommit":false,"messageTitle":"Add JavaDoc for ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":0}}},{"hash":"385ced88b50c44c7f8f949dc3fb5fad30e859ffc","isMergeCommit":true,"messageTitle":"Merge pull request #84 from limyuhching/JUnit_DeleteIncomeCommand","messageBody":"Add JUnit for DeleteIncomeCommand","fileTypesAndContributionMap":{}},{"hash":"a675ae9e49ae0699e12bccf1e5ed6e3e76dd6703","isMergeCommit":true,"messageTitle":"Merge pull request #85 from limyuhching/JUnit_DeleteExpenseCommand","messageBody":"Add JUnit and JavaDoc to DeleteExpenseCommand","fileTypesAndContributionMap":{}},{"hash":"dc8741864a20266b1fb0e9bb10170d7dae995c8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027JUnit_DeleteExpenseCommand\u0027 into Yuh.Ching-feature-edit","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"2a77405896563ecf112b2964f15f81df3b8eedbd","isMergeCommit":false,"messageTitle":"Feature: Edit Income and Expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":183,"deletions":13},"test-code":{"insertions":116,"deletions":0}}},{"hash":"752ff1c0afa5ea17df7e0bd3065ac353b0a6c410","isMergeCommit":true,"messageTitle":"Merge branch \u0027Yuh.Ching-feature-edit\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n#\tsrc/main/java/seedu/duke/parser/Parser.java\n#\tsrc/main/java/seedu/duke/ui/Ui.java\n#\ttext-ui-test/EXPECTED.TXT\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"bbb14a8f04eac545603b09a5d59ad8163f6a35c0","isMergeCommit":true,"messageTitle":"Merge pull request #102 from limyuhching/master","messageBody":"Add Edit Feature","fileTypesAndContributionMap":{}}]}],"bljhty":[{"date":"2023-10-05","commitResults":[{"hash":"3647d84668028d5ea5c84d7627894a8ef0ee48fc","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-09","commitResults":[{"hash":"7e60ffed6f6e2ee9a0f983eee8e8a977406dfe5a","isMergeCommit":false,"messageTitle":"edited Duke class, added Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":14}}},{"hash":"d8c20c9389f7a68369aa5fbbfd4ac33184a15975","isMergeCommit":false,"messageTitle":"Revert \"edited Duke class, added Ui class\"","messageBody":"This reverts commit 7e60ffed6f6e2ee9a0f983eee8e8a977406dfe5a.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":11}}},{"hash":"9543dee9ca0e62cad63e6cab349aa53372035467","isMergeCommit":false,"messageTitle":"Revert \"Revert \"edited Duke class, added Ui class\"\"","messageBody":"This reverts commit d8c20c9389f7a68369aa5fbbfd4ac33184a15975.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":14}}},{"hash":"e6e15fd5f670eda63cebf191b00c5da28f019d90","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":0}}}]},{"date":"2023-10-11","commitResults":[{"hash":"d68fb478567a1542650b85e6563e6f62f641bdce","isMergeCommit":true,"messageTitle":"Merge pull request #4 from bljhty/master","messageBody":"Ui class added","fileTypesAndContributionMap":{}},{"hash":"fd522121b4dfe8c849d157c5273ea54a0aefefdd","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"d74d0e8d3dd1acfc47f1f94b3a55afe1245cef5b","isMergeCommit":true,"messageTitle":"Merge pull request #5 from bljhty/Bryan-Ui_Class","messageBody":"Bryan UI class","fileTypesAndContributionMap":{}},{"hash":"ac5e4bffd283c4ada16e720a489c48f40cf62d45","isMergeCommit":false,"messageTitle":"added parser class and \"bye\" command to exit the program","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":2}}},{"hash":"146c1e73d2ce3c3bba44f73c548c824cd6bad416","isMergeCommit":true,"messageTitle":"Merge pull request #6 from bljhty/Bryan-Ui_exit_program","messageBody":"added parser class and \"bye\" command to exit the program","fileTypesAndContributionMap":{}},{"hash":"023a67aa11129e7329f57d108d4b3b071f4dfd7a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"1e769fe7348a49764e97958bee02138b848c4078","isMergeCommit":false,"messageTitle":"edited code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"56a91fa04831b1e06d8763d46b71d127c4ed2a00","isMergeCommit":false,"messageTitle":"edited code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":10}}},{"hash":"2dd7e20d1facad6c28ac218229a49e0d2512af1a","isMergeCommit":true,"messageTitle":"Merge pull request #7 from bljhty/Bryan-Ui_exit_program","messageBody":"Bryan UI exit program","fileTypesAndContributionMap":{}},{"hash":"bd4a31df6e42d5a903c4fab01439db31d962cf18","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"4e8e8a23056ebd8406321216403edf432b6999e9","isMergeCommit":true,"messageTitle":"Merge pull request #8 from bljhty/Bryan-Ui_exit_program","messageBody":"Bryan minor changes to code","fileTypesAndContributionMap":{}},{"hash":"d0d3b91db4ee5e0246a08beb19f6d5bf1becd689","isMergeCommit":false,"messageTitle":"added KaChinng exception class to handle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":15}}},{"hash":"15235a31b2217e9e7340ec3c94e4760276fa7bb6","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":9}}},{"hash":"402c958dcd6b25b20d588adf6d488ef738dadc52","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"d3432fa63e6626dd7c9834b0f3c44216ed6a2d2d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"839899344f669c73d5f8ff23d80e68b66f3e60f5","isMergeCommit":false,"messageTitle":"edited test.sh","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"b384a0a035717caa270226c388abfdc1da60cf7c","isMergeCommit":true,"messageTitle":"Merge pull request #19 from bljhty/Bryan-kachingg_exception_class","messageBody":"Bryan kachingg exception class","fileTypesAndContributionMap":{}},{"hash":"032e9e794b6cad89ea6eab4b8dbe01458b253726","isMergeCommit":false,"messageTitle":"edited aboutus page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"03fd6b2bd1462b8d3696fd96ae44264b386963fa","isMergeCommit":true,"messageTitle":"Merge pull request #20 from bljhty/Bryan-edit_about_us","messageBody":"edited aboutus page","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"873f424ba9981398334f6299fda0bc3cceb73103","isMergeCommit":true,"messageTitle":"Merge pull request #24 from limyuhching/master","messageBody":"Add Lim Yuh Ching to AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"28a6c552f73b92cece6ec576f68cab9a4f665f0b","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"fac1c519c857b496309e7fe6af4af67b5e73d7e6","isMergeCommit":true,"messageTitle":"Merge pull request #26 from bljhty/Bryan-UI_class_updated","messageBody":"Bryan UI class added","fileTypesAndContributionMap":{}},{"hash":"0aac2612fa5b3b29db3f83bd3f56e9d3df220408","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"dd4c190f169c56878ea072be5116d0ab299b302b","isMergeCommit":true,"messageTitle":"Merge pull request #30 from bljhty/Bryan-ParserClass","messageBody":"Bryan Parser Class","fileTypesAndContributionMap":{}},{"hash":"6e5a21ee4c8e1734c7a134cbf4c1f681fad66fef","isMergeCommit":false,"messageTitle":"Added income class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":0}}},{"hash":"2d31a0a186af6541c21ffa13d5f7f60da9eaccc8","isMergeCommit":false,"messageTitle":"edited income class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":13}}},{"hash":"3fa46fa0749d6bbaab94cbee2f3ca66b93b9da1f","isMergeCommit":true,"messageTitle":"Merge pull request #32 from bljhty/Bryan-IncomeClass","messageBody":"Bryan income class","fileTypesAndContributionMap":{}},{"hash":"e723c830357b03fc0f01f9d145be1a1d3417c7ed","isMergeCommit":false,"messageTitle":"added commands class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0},"other":{"insertions":2,"deletions":2}}},{"hash":"41eee99740159c15d92884ce1b22bbc2149337a6","isMergeCommit":true,"messageTitle":"Merge pull request #33 from bljhty/Bryan-commandsClass","messageBody":"added commands class","fileTypesAndContributionMap":{}},{"hash":"2ef7421ecd90522a7f5746a96af22b928cc9a5e3","isMergeCommit":false,"messageTitle":"added the add income functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":138,"deletions":1}}},{"hash":"0de2467e5781906407d226b74596b4b404c645f6","isMergeCommit":true,"messageTitle":"Merge pull request #35 from bljhty/Bryan-AddIncomeFunction","messageBody":"added the add income functionality","fileTypesAndContributionMap":{}},{"hash":"c1415803bafbc7e40a5307c457495e1e36b2ecd5","isMergeCommit":false,"messageTitle":"added JUnit test for income","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":0}}},{"hash":"029f86a4fc3183c74920521dd3dcee4cceebab78","isMergeCommit":true,"messageTitle":"Merge pull request #37 from bljhty/Bryan-AddIncomeJunit","messageBody":"added JUnit test for income","fileTypesAndContributionMap":{}},{"hash":"f7be2e6b37b7ffaf6f44b59e7a24debacf9c71fb","isMergeCommit":false,"messageTitle":"added the list income function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":0}}},{"hash":"95034b9c866c415fcfdc3c484ee9bb03b07f4822","isMergeCommit":true,"messageTitle":"Merge pull request #38 from bljhty/Bryan-ListCommand","messageBody":"added the list income function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"3f5c8ecd561ac20483518ba49f808358d9a31ba6","isMergeCommit":false,"messageTitle":"Added JUnit Test for income parser class,","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":54,"deletions":0}}},{"hash":"efecaa2ff6828936f318ec93f7fbbaf73b07cc47","isMergeCommit":true,"messageTitle":"Merge pull request #41 from bljhty/Bryan-AddJUnitTestIncomeParser","messageBody":"Added JUnit Test for income parser class edit minor bugs in expense class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"b96b8820f857121283457a520bfb762ef2ca2c6c","isMergeCommit":false,"messageTitle":"minor bug fixing and added javadoc","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":207,"deletions":6}}},{"hash":"a70966392c50aeb619d6895abd2a93f46c66e25a","isMergeCommit":true,"messageTitle":"Merge pull request #45 from bljhty/Bryan-bug_fixing","messageBody":"minor bug fixing and added javadoc","fileTypesAndContributionMap":{}},{"hash":"71eb946d765b405e018d22d60330e083e2a3bf13","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":174},"other":{"insertions":0,"deletions":0}}},{"hash":"b8a856dcc26db8ede044ef2bcac0852bcdb3838e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":174,"deletions":0}}},{"hash":"0789a529e66efa74edc3ba2583b1152f5bd69e45","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"57b072ff69089aa71edecde0e12ab91907656d56","isMergeCommit":true,"messageTitle":"Merge pull request #46 from bljhty/Bryan-bug_fixing","messageBody":"Bryan bug fixing","fileTypesAndContributionMap":{}},{"hash":"c90e926cc7b8751df51dfe7387c0ceacd15a7845","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"dcf55f397a5193fa02c0554cb721f55d6a3c6beb","isMergeCommit":true,"messageTitle":"Merge pull request #48 from bljhty/master","messageBody":"no message","fileTypesAndContributionMap":{}},{"hash":"ac5acc3ceba4fdb5cbc729e88eab16b5edd239d0","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"8f9b494475f77182a35a655b40d0fefb1fcade21","isMergeCommit":true,"messageTitle":"Merge pull request #50 from bljhty/master","messageBody":"no message","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"34f306cc9e5ca4ef28e89e0e87179ab88d3256cf","isMergeCommit":false,"messageTitle":"edited testsh and expected output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"670b7ab465c3ec3436b883f873cac7cfdc7acd24","isMergeCommit":true,"messageTitle":"Merge pull request #60 from bljhty/Bryan-edit_testsh","messageBody":"edited testsh and expected output","fileTypesAndContributionMap":{}},{"hash":"c6c923f637432277043fe840fd3fbb92c8a7ef25","isMergeCommit":false,"messageTitle":"added JUnit test for expenseparser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":183,"deletions":0}}},{"hash":"aac9e86c2c1b463fa8173ffe62fba62f4b6a2ef0","isMergeCommit":true,"messageTitle":"Merge pull request #63 from bljhty/Bryan-Expense_parser_Junit","messageBody":"added JUnit test for expenseparser class","fileTypesAndContributionMap":{}},{"hash":"15fed349abbdcd95755be03abeea18551923713e","isMergeCommit":false,"messageTitle":"updated JUnit for income parser, added javadoc for both expense parsertest and incomeParserTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2},"test-code":{"insertions":202,"deletions":12}}},{"hash":"a06eab9c52dfff4de8d0dbdb26bc4e9b3e10f380","isMergeCommit":true,"messageTitle":"Merge pull request #64 from bljhty/Bryan-income_parser_Junit_updated","messageBody":"updated JUnit for income parser, added javadoc for both expense parse…","fileTypesAndContributionMap":{}},{"hash":"762b83d89c0b39cc91a5d31d4ad2a67e1b0b36f3","isMergeCommit":false,"messageTitle":"added expense JUnit test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":69,"deletions":0}}},{"hash":"1d5706ae2c956e8475671e773ef038d27cd7c6d8","isMergeCommit":true,"messageTitle":"Merge pull request #67 from bljhty/Bryan-expenseTest","messageBody":"added expense JUnit test","fileTypesAndContributionMap":{}},{"hash":"97a9b3858d57d9a4bd339e98ed54c363175e83f4","isMergeCommit":false,"messageTitle":"added balanceTest and javadoc comments for balanceTest and expenseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":117,"deletions":0}}},{"hash":"433aeba0e3f9ff256e9e6b065a78e1b4f7f5c7e7","isMergeCommit":true,"messageTitle":"Merge pull request #70 from bljhty/Bryan-balanceTest","messageBody":"added balanceTest and javadoc comments for balanceTest and expenseTest","fileTypesAndContributionMap":{}},{"hash":"e76caab50cc07de5b2bc2c5f80489b2d90c27f1b","isMergeCommit":false,"messageTitle":"change \"bye\" to \"exit\" to exit the program","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"e6badcdf8a009ff91209efb521c0b17f9286079b","isMergeCommit":true,"messageTitle":"Merge pull request #71 from bljhty/Bryan-balanceTest","messageBody":"change \"bye\" to \"exit\" to exit the program","fileTypesAndContributionMap":{}},{"hash":"03b17833325f95216af8857e242d3b5af65f5219","isMergeCommit":false,"messageTitle":"added logging and assertions for incomeLister, Income, incomeManager, FinancialRecord, IncomeParser and Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":13},"other":{"insertions":4,"deletions":0}}},{"hash":"4ee809172b0d94fa8ca80d620d1a4bd10557de51","isMergeCommit":true,"messageTitle":"Merge pull request #73 from bljhty/Bryan-logging_and_assertions","messageBody":"added logging and assertions for incomeLister, Income, incomeManager,…","fileTypesAndContributionMap":{}},{"hash":"6bbab986b5e67c176ec482d39cf69b3c983c5e5f","isMergeCommit":false,"messageTitle":"updated userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":80,"deletions":18}}},{"hash":"6edfa2b4c4816e4386bf978ec444c8e680f003c0","isMergeCommit":true,"messageTitle":"Merge pull request #74 from bljhty/Bryan-UserGuide_update","messageBody":"updated userguide","tags":["KaChinnnngv1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"62b94094ee4923eefe2d4b8c4d1cefc02f85ed08","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":5}}},{"hash":"37718df880e8caf3a75c0f1c6e3565e6d2642bf2","isMergeCommit":true,"messageTitle":"Merge pull request #75 from bljhty/Bryan-EditCode","messageBody":"no message","fileTypesAndContributionMap":{}},{"hash":"bfd698b4dd26861ced11ba5ea65704c8bb1a847d","isMergeCommit":false,"messageTitle":"edited bug where logger information is being displayed in the output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":5}}}]},{"date":"2023-10-23","commitResults":[{"hash":"7d763fd902700e4578442d4de7ba7cefd9c09411","isMergeCommit":false,"messageTitle":"added the find function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":22}}},{"hash":"3f46ad0f1c25480383c5cb30df8dcda0af1ef9e2","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":235,"deletions":0}}},{"hash":"a8cdf9a8a14b68c448977a80a12185508edc01cf","isMergeCommit":true,"messageTitle":"Merge pull request #87 from bljhty/Bryan-Find_function","messageBody":"Bryan find function","fileTypesAndContributionMap":{}},{"hash":"39b7a99a518e790ecf6dd123857df4caab783b36","isMergeCommit":false,"messageTitle":"made it such that the log file will be in a folder instead","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":4}}},{"hash":"7cc042582af15a30ae4e2af2394a3a460eb27e82","isMergeCommit":true,"messageTitle":"Merge pull request #88 from bljhty/Bryan-log_fixing","messageBody":"made it such that the log file will be in a folder instead","fileTypesAndContributionMap":{}},{"hash":"6ff08dd325033acea8bf60352d53eda3ef747616","isMergeCommit":false,"messageTitle":"clean up income manager class and change input formats","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":18}}},{"hash":"10a9c5009055e8bd38e4fe5031d2d4467dd0e41a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"24ab533265f7e3716b86eb8331f978e71c3a4734","isMergeCommit":true,"messageTitle":"Merge pull request #90 from bljhty/Bryan-edit_IncomeManager","messageBody":"Bryan edit income manager","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"8636ab7ee8656732e70f001cefbaeb15ee4ee6cb","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":36}}},{"hash":"7eb3bc044234d200d13e2442a134686f1e191bbb","isMergeCommit":true,"messageTitle":"Merge pull request #91 from bljhty/Bryan-logging+assertion_findcommand","messageBody":"added logging and assertions to findCommand class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"106754518beae746363af4b8c58c0193c9674ba4","isMergeCommit":false,"messageTitle":"added DG for incomeManager","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":6},"docs":{"insertions":10,"deletions":0}}},{"hash":"1d7a839da12b7de630333477f4fbbed1adfc6797","isMergeCommit":true,"messageTitle":"Merge pull request #95 from bljhty/Bryan-updating_developerguide","messageBody":"added DG for incomeManager","fileTypesAndContributionMap":{}},{"hash":"5b832a32301924c877b0fb2ef0598806b54b234e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0},"docs":{"insertions":25,"deletions":5}}},{"hash":"e7dd967864e94d72cc75560ded319bc5e2c2ad28","isMergeCommit":true,"messageTitle":"Merge pull request #101 from bljhty/Bryan-updating_developerguide(2)","messageBody":"updated UserGuide for FindCommand class and edited code snippets","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"56a7e40cb4436f0d20b0ad0e33ce1272451cea1b","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":8}}}]},{"date":"2023-10-27","commitResults":[{"hash":"5b1224aa7da13e18d1570d4b4a09dc4f20e20c14","isMergeCommit":true,"messageTitle":"Merge pull request #103 from bljhty/Bryan-FincCommand_JavaDoc","messageBody":"added javadoc comments for FindCommands","fileTypesAndContributionMap":{}}]}],"Hongzhii":[{"date":"2023-10-12","commitResults":[{"hash":"374988e8cd3295fcc475bc7750fb4b9fb00876cb","isMergeCommit":false,"messageTitle":"add expense class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"e2c1a08d38fb0980168c121d98f9a550d41908d9","isMergeCommit":true,"messageTitle":"Merge pull request #39 from Hongzhii/add-expense-class","messageBody":"add expense class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"fdb794183e31163e1516dff81559a932400e697b","isMergeCommit":false,"messageTitle":"add expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":299,"deletions":2}}},{"hash":"f9620e70b7be8738cd6fad83aac026b9a6e3ac86","isMergeCommit":false,"messageTitle":"fix coding standards issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-16","commitResults":[{"hash":"098a0492e5d4180fdc5f363384f4dad966b685fd","isMergeCommit":true,"messageTitle":"Merge pull request #43 from Hongzhii/add-expense-class","messageBody":"create different expense categories","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"d0a0911eb6616b1d618539343913144ab3b96c0f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Hongzhii/tp into add-expense-class","messageBody":"* \u0027master\u0027 of https://github.com/Hongzhii/tp:\n no message\n no message\n no message\n no message\n no message\n minor bug fixing and added javadoc\n add the help function\n\n# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n#\tsrc/main/java/seedu/duke/commands/ExpenseLister.java\n#\tsrc/main/java/seedu/duke/commands/ExpenseManager.java\n#\tsrc/main/java/seedu/duke/parser/ExpenseParser.java\n#\tsrc/main/java/seedu/duke/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"6dc33217fab2dad56a7817bcdf9c0bb669e527f4","isMergeCommit":true,"messageTitle":"Merge pull request #52 from Hongzhii/add-expense-class","messageBody":"Add expense class","fileTypesAndContributionMap":{}},{"hash":"2982cf9151c17da188b454e61f5d05a6f1bcd26c","isMergeCommit":true,"messageTitle":"Merge pull request #51 from AY2324S1-CS2113-T18-3/add-expense-class","messageBody":"Add expense class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"ab30caec1cd31ad109d5be413d60a431098f662a","isMergeCommit":false,"messageTitle":"add java doc","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":110,"deletions":8}}},{"hash":"c6826012f1f2fa18afe80e27196b98d85a2da144","isMergeCommit":false,"messageTitle":"fix coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"303628c0a8d489a99a106bfe47ec1b5fd3100075","isMergeCommit":true,"messageTitle":"Merge pull request #66 from Hongzhii/master","messageBody":"add java doc","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"7ee4535ebcf6a796938d1ad67f2ab82ca0537831","isMergeCommit":true,"messageTitle":"Merge pull request #82 from bljhty/Bryan_LOGGING_bug","messageBody":"edited bug where logger information is being displayed in the output","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"57091e1603dc4a51c8d4bfa9a65bada3c4bbec1b","isMergeCommit":false,"messageTitle":"change toString method to include enum type information","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"64994adc4f2dd4af9b021e5f8dae61fbd6298882","isMergeCommit":false,"messageTitle":"update parser and expense manager","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":41,"deletions":11}}},{"hash":"8b2ce625f1678c12fc73a87d1a8be704963c151e","isMergeCommit":false,"messageTitle":"update unit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":5},"test-code":{"insertions":9,"deletions":5}}},{"hash":"e3becbb79486d7af284a270c67bc444fe990a487","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-type-functionality-to-expenses\u0027","messageBody":"* add-type-functionality-to-expenses:\n update unit tests\n update i/o tests\n update parser and expense manager\n change toString method to include enum type information\n","fileTypesAndContributionMap":{}},{"hash":"e0ff3d162d26673c9bdac78b0a8713dd7e4ed7b8","isMergeCommit":true,"messageTitle":"Merge pull request #105 from Hongzhii/master","messageBody":"add type functionality to expenses","fileTypesAndContributionMap":{}},{"hash":"15dda310b6cb156064f1f84aaa80d58b27f774eb","isMergeCommit":false,"messageTitle":"update developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":0}}},{"hash":"fd1e0031d8dfc29a95d461b467eda6a3eeff737b","isMergeCommit":true,"messageTitle":"Merge branch \u0027update-developer-guide\u0027","messageBody":"* update-developer-guide:\n update developer guide\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"356e34b25e6d229286bcd1070a0fd092ec09c2c5","isMergeCommit":true,"messageTitle":"Merge pull request #106 from Hongzhii/master","messageBody":"update DG","fileTypesAndContributionMap":{}}]}],"KenCheung18":[{"date":"2023-10-05","commitResults":[{"hash":"ff771b65c44f9dd8452f28d33c98131f6ebdaca3","isMergeCommit":false,"messageTitle":"AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"169d557cd8aeb41bfc052c8baa84595ffdfb91a6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from KenCheung18/AboutUs","messageBody":"AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"329946ddf88f470e861a65d067db83b89ac74e38","isMergeCommit":false,"messageTitle":"add the help function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":0}}},{"hash":"4451eda2b70e6fac03872dd33858a8d24c486e4c","isMergeCommit":true,"messageTitle":"Merge pull request #44 from KenCheung18/Usage-instructions","messageBody":"add the help function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"bcae9628b344bc6cb291a079aca607faff1fe7db","isMergeCommit":false,"messageTitle":"Solve conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"85c13e1244776c0f0866cdcce5a35676a6c27715","isMergeCommit":false,"messageTitle":"Solve another conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"10b6b25ca6c8901d81089ea4d3f1914ea47a41df","isMergeCommit":false,"messageTitle":"Solve minor bug on switch statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"d92551230ce733460145529d1b989be404f9e7d2","isMergeCommit":true,"messageTitle":"Merge pull request #53 from KenCheung18/Bug-solve-for-expense-class","messageBody":"Solve merge conflict","fileTypesAndContributionMap":{}},{"hash":"963101c37e2e2463d2b56dbbc75f772ae778bee2","isMergeCommit":false,"messageTitle":"Balance Function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":0}}},{"hash":"b61608b37db593b319f5b214c27c1ed7a2a47202","isMergeCommit":false,"messageTitle":"Minor bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"fb0d1b79960c19af7b291b56b8cd9925b24cb710","isMergeCommit":true,"messageTitle":"Merge pull request #58 from KenCheung18/Balance","messageBody":"Balance Function","fileTypesAndContributionMap":{}},{"hash":"f186609c39c31189eeeebeb89d7dc00b32bea648","isMergeCommit":false,"messageTitle":"Bug fix on balance function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"2796193e5f7ec9efb7eb8c7f92d5ae2b26eadea0","isMergeCommit":true,"messageTitle":"Merge pull request #59 from KenCheung18/Balance-bug-fix","messageBody":"Bug fix on balance function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"39b92cb3edb128ffb3386d0d23a3d6a3a9e47010","isMergeCommit":false,"messageTitle":"javadoc for Balance and UsageInstructions class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":1}}},{"hash":"e8cbb9f2e94ac946debabad31cd1e21edd590e4a","isMergeCommit":false,"messageTitle":"minor bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"b33182fbf46985067b73ce658ac1e1b8966a7a07","isMergeCommit":false,"messageTitle":"javadoc bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"2e540a1baf3784a8c9fff244e353199805ff168c","isMergeCommit":true,"messageTitle":"Merge pull request #65 from KenCheung18/Balance-add-javadoc","messageBody":"Add javadoc on balance class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"beed4e277ab87a56865f2feec2c41315f7618e61","isMergeCommit":false,"messageTitle":"Save the income and expense to txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":0}}},{"hash":"30495ba61c5154c18acdbb12a2c764428fd20547","isMergeCommit":false,"messageTitle":"Get the incomes and expenses from txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":103,"deletions":0}}},{"hash":"44cc8ff64eed0b27d78091d1f94c36906df9c32b","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":56,"deletions":4}}},{"hash":"e1662d922f6415fc120ee9a46ec3707f937553f1","isMergeCommit":false,"messageTitle":"Style correction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":11}}},{"hash":"10a8106e93484afda5a7bb7cd116372428881158","isMergeCommit":true,"messageTitle":"Merge pull request #93 from KenCheung18/Storage-function","messageBody":"Storage function","fileTypesAndContributionMap":{}},{"hash":"26c32ef86ca87fb6f6602410781caa103fa14a10","isMergeCommit":false,"messageTitle":"Clear income function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":4}}},{"hash":"8a55003d9fe93008935363b856988d29a4ec29a0","isMergeCommit":false,"messageTitle":"Clear expense function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":0}}},{"hash":"cfbc0c5c9c5c2ef4805199276fcf827ff906dd42","isMergeCommit":false,"messageTitle":"Clear all and due with the user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":0}}},{"hash":"2194afadd9dd4b1617ef8cbd65f4fa2b2a11ca61","isMergeCommit":true,"messageTitle":"Merge pull request #94 from KenCheung18/Clear-function","messageBody":"Clear function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"76c95157c2e101d5b2ea291f63d431c02a2157d6","isMergeCommit":false,"messageTitle":"Create DG for GetFromTxt","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":0}}},{"hash":"7dfba6bfa646fc484614a76326af86af8d7ab514","isMergeCommit":true,"messageTitle":"Merge pull request #107 from KenCheung18/Developer-Guide-GetFromTxt","messageBody":"Create DG for GetFromTxt","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"limyuhching":{"docs":1,"functional-code":356,"test-code":278},"bljhty":{"docs":113,"functional-code":1185,"test-code":653,"other":5},"Hongzhii":{"docs":36,"functional-code":438,"test-code":9},"KenCheung18":{"docs":13,"functional-code":379,"test-code":0}},"authorContributionVariance":{"limyuhching":5166.6265,"bljhty":30981.291,"Hongzhii":3142.361,"KenCheung18":3382.1667},"authorDisplayNameMap":{"limyuhching":"CS2113-T18-3 LIM ..HING","bljhty":"CS2113-T18-3 LEE ..RYAN","Hongzhii":"CS2113-T18-3 EE H.. ZHI","KenCheung18":"CS2113-T18-3 CHEU..YUEN"}} +{"authorDailyContributionsMap":{"limyuhching":[{"date":"2023-10-12","commitResults":[{"hash":"7f15c328582d32d223482ccd59a5852f9ad70029","isMergeCommit":false,"messageTitle":"Add Lim Yuh Ching to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"47e7e2474c8c6f73387b9dcd7047da3c77cb619e","isMergeCommit":false,"messageTitle":"Add ListCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":59,"deletions":5}}},{"hash":"e176e64efb5cc74bcf08757e82020ae7bc9c656f","isMergeCommit":false,"messageTitle":"Add list option to parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4}}},{"hash":"8a99e6a7dc43fd86423cf7046827ac5f7611f9fa","isMergeCommit":false,"messageTitle":"Add Ui to ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":2}}},{"hash":"54d292397684060fd65c2389c300dea0cb712504","isMergeCommit":true,"messageTitle":"Merge branch \u0027Yuh.Ching-feature-list\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ea3da5f550569c65319ff4911fe9fed728a97e64","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/limyuhching/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"fd506a278351582ab91f8f4b974b1db63765cfac","isMergeCommit":false,"messageTitle":"Change imports from .* to individual class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":7}}},{"hash":"9c3010789b6b2bc4f285263b77d6e56b0ce6988f","isMergeCommit":false,"messageTitle":"Add DeleteIncomeCommand and DeleteExpenseCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":1}}},{"hash":"ecdcbbe69b47d928a759d2cb81efe93cfa538c7b","isMergeCommit":true,"messageTitle":"Merge branch \u0027Yuh.Ching-feature-delete\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n","fileTypesAndContributionMap":{}},{"hash":"3ae858c7a01d9a61a3e500510b79b26b23fe6a5c","isMergeCommit":false,"messageTitle":"Minor bug fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"69a33bbf033086dc0c4f8e2d314dff052227afd7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"939ddd821d709edc8b7e0f4c6e53bb8648e6a8d8","isMergeCommit":false,"messageTitle":"Remove duplicate import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"e7ee368b163df8c82a81ae2738e2f745f44b9846","isMergeCommit":false,"messageTitle":"Bug fixes - wrong indexing for delete command - inconsistent line divider","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":12}}},{"hash":"192a5b32be615e963b03f1bb584aa7eec161324d","isMergeCommit":true,"messageTitle":"Merge pull request #57 from limyuhching/master","messageBody":"Add list and delete feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"470e50657798752e0cea1cf681a1286ead745f62","isMergeCommit":false,"messageTitle":"Add JavaDoc and JUnit test for DeleteIncomeCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":2},"test-code":{"insertions":81,"deletions":0}}},{"hash":"4b8b9e883d87a6a56300486eb6a1e12affb1f7c1","isMergeCommit":false,"messageTitle":"Changed Ui output of ListCommand and DeleteExpenseCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":6}}},{"hash":"8585f39452170b750700c20306dd0bda7ef4eb7e","isMergeCommit":false,"messageTitle":"Debug style error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":3}}},{"hash":"6230bbe0816a74140c927ef9d79550a43ef2e0ec","isMergeCommit":false,"messageTitle":"Add JUnit and JavaDoc to DeleteExpenseCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":9},"test-code":{"insertions":82,"deletions":0}}},{"hash":"4db459d6ae7b6aeeb759152a49a039f92392198d","isMergeCommit":false,"messageTitle":"Add JavaDoc for ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":0}}},{"hash":"385ced88b50c44c7f8f949dc3fb5fad30e859ffc","isMergeCommit":true,"messageTitle":"Merge pull request #84 from limyuhching/JUnit_DeleteIncomeCommand","messageBody":"Add JUnit for DeleteIncomeCommand","fileTypesAndContributionMap":{}},{"hash":"a675ae9e49ae0699e12bccf1e5ed6e3e76dd6703","isMergeCommit":true,"messageTitle":"Merge pull request #85 from limyuhching/JUnit_DeleteExpenseCommand","messageBody":"Add JUnit and JavaDoc to DeleteExpenseCommand","fileTypesAndContributionMap":{}},{"hash":"dc8741864a20266b1fb0e9bb10170d7dae995c8f","isMergeCommit":true,"messageTitle":"Merge branch \u0027JUnit_DeleteExpenseCommand\u0027 into Yuh.Ching-feature-edit","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"2a77405896563ecf112b2964f15f81df3b8eedbd","isMergeCommit":false,"messageTitle":"Feature: Edit Income and Expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":183,"deletions":13},"test-code":{"insertions":116,"deletions":0}}},{"hash":"752ff1c0afa5ea17df7e0bd3065ac353b0a6c410","isMergeCommit":true,"messageTitle":"Merge branch \u0027Yuh.Ching-feature-edit\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n#\tsrc/main/java/seedu/duke/parser/Parser.java\n#\tsrc/main/java/seedu/duke/ui/Ui.java\n#\ttext-ui-test/EXPECTED.TXT\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"bbb14a8f04eac545603b09a5d59ad8163f6a35c0","isMergeCommit":true,"messageTitle":"Merge pull request #102 from limyuhching/master","messageBody":"Add Edit Feature","fileTypesAndContributionMap":{}}]}],"bljhty":[{"date":"2023-10-05","commitResults":[{"hash":"3647d84668028d5ea5c84d7627894a8ef0ee48fc","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-09","commitResults":[{"hash":"7e60ffed6f6e2ee9a0f983eee8e8a977406dfe5a","isMergeCommit":false,"messageTitle":"edited Duke class, added Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":14}}},{"hash":"d8c20c9389f7a68369aa5fbbfd4ac33184a15975","isMergeCommit":false,"messageTitle":"Revert \"edited Duke class, added Ui class\"","messageBody":"This reverts commit 7e60ffed6f6e2ee9a0f983eee8e8a977406dfe5a.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":11}}},{"hash":"9543dee9ca0e62cad63e6cab349aa53372035467","isMergeCommit":false,"messageTitle":"Revert \"Revert \"edited Duke class, added Ui class\"\"","messageBody":"This reverts commit d8c20c9389f7a68369aa5fbbfd4ac33184a15975.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":14}}},{"hash":"e6e15fd5f670eda63cebf191b00c5da28f019d90","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":0}}}]},{"date":"2023-10-11","commitResults":[{"hash":"d68fb478567a1542650b85e6563e6f62f641bdce","isMergeCommit":true,"messageTitle":"Merge pull request #4 from bljhty/master","messageBody":"Ui class added","fileTypesAndContributionMap":{}},{"hash":"fd522121b4dfe8c849d157c5273ea54a0aefefdd","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"d74d0e8d3dd1acfc47f1f94b3a55afe1245cef5b","isMergeCommit":true,"messageTitle":"Merge pull request #5 from bljhty/Bryan-Ui_Class","messageBody":"Bryan UI class","fileTypesAndContributionMap":{}},{"hash":"ac5e4bffd283c4ada16e720a489c48f40cf62d45","isMergeCommit":false,"messageTitle":"added parser class and \"bye\" command to exit the program","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":2}}},{"hash":"146c1e73d2ce3c3bba44f73c548c824cd6bad416","isMergeCommit":true,"messageTitle":"Merge pull request #6 from bljhty/Bryan-Ui_exit_program","messageBody":"added parser class and \"bye\" command to exit the program","fileTypesAndContributionMap":{}},{"hash":"023a67aa11129e7329f57d108d4b3b071f4dfd7a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"1e769fe7348a49764e97958bee02138b848c4078","isMergeCommit":false,"messageTitle":"edited code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"56a91fa04831b1e06d8763d46b71d127c4ed2a00","isMergeCommit":false,"messageTitle":"edited code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":10}}},{"hash":"2dd7e20d1facad6c28ac218229a49e0d2512af1a","isMergeCommit":true,"messageTitle":"Merge pull request #7 from bljhty/Bryan-Ui_exit_program","messageBody":"Bryan UI exit program","fileTypesAndContributionMap":{}},{"hash":"bd4a31df6e42d5a903c4fab01439db31d962cf18","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"4e8e8a23056ebd8406321216403edf432b6999e9","isMergeCommit":true,"messageTitle":"Merge pull request #8 from bljhty/Bryan-Ui_exit_program","messageBody":"Bryan minor changes to code","fileTypesAndContributionMap":{}},{"hash":"d0d3b91db4ee5e0246a08beb19f6d5bf1becd689","isMergeCommit":false,"messageTitle":"added KaChinng exception class to handle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":15}}},{"hash":"15235a31b2217e9e7340ec3c94e4760276fa7bb6","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":9}}},{"hash":"402c958dcd6b25b20d588adf6d488ef738dadc52","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"d3432fa63e6626dd7c9834b0f3c44216ed6a2d2d","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1}}},{"hash":"839899344f669c73d5f8ff23d80e68b66f3e60f5","isMergeCommit":false,"messageTitle":"edited test.sh","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"b384a0a035717caa270226c388abfdc1da60cf7c","isMergeCommit":true,"messageTitle":"Merge pull request #19 from bljhty/Bryan-kachingg_exception_class","messageBody":"Bryan kachingg exception class","fileTypesAndContributionMap":{}},{"hash":"032e9e794b6cad89ea6eab4b8dbe01458b253726","isMergeCommit":false,"messageTitle":"edited aboutus page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"03fd6b2bd1462b8d3696fd96ae44264b386963fa","isMergeCommit":true,"messageTitle":"Merge pull request #20 from bljhty/Bryan-edit_about_us","messageBody":"edited aboutus page","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"873f424ba9981398334f6299fda0bc3cceb73103","isMergeCommit":true,"messageTitle":"Merge pull request #24 from limyuhching/master","messageBody":"Add Lim Yuh Ching to AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"28a6c552f73b92cece6ec576f68cab9a4f665f0b","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"fac1c519c857b496309e7fe6af4af67b5e73d7e6","isMergeCommit":true,"messageTitle":"Merge pull request #26 from bljhty/Bryan-UI_class_updated","messageBody":"Bryan UI class added","fileTypesAndContributionMap":{}},{"hash":"0aac2612fa5b3b29db3f83bd3f56e9d3df220408","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"dd4c190f169c56878ea072be5116d0ab299b302b","isMergeCommit":true,"messageTitle":"Merge pull request #30 from bljhty/Bryan-ParserClass","messageBody":"Bryan Parser Class","fileTypesAndContributionMap":{}},{"hash":"6e5a21ee4c8e1734c7a134cbf4c1f681fad66fef","isMergeCommit":false,"messageTitle":"Added income class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":0}}},{"hash":"2d31a0a186af6541c21ffa13d5f7f60da9eaccc8","isMergeCommit":false,"messageTitle":"edited income class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":13}}},{"hash":"3fa46fa0749d6bbaab94cbee2f3ca66b93b9da1f","isMergeCommit":true,"messageTitle":"Merge pull request #32 from bljhty/Bryan-IncomeClass","messageBody":"Bryan income class","fileTypesAndContributionMap":{}},{"hash":"e723c830357b03fc0f01f9d145be1a1d3417c7ed","isMergeCommit":false,"messageTitle":"added commands class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0},"other":{"insertions":2,"deletions":2}}},{"hash":"41eee99740159c15d92884ce1b22bbc2149337a6","isMergeCommit":true,"messageTitle":"Merge pull request #33 from bljhty/Bryan-commandsClass","messageBody":"added commands class","fileTypesAndContributionMap":{}},{"hash":"2ef7421ecd90522a7f5746a96af22b928cc9a5e3","isMergeCommit":false,"messageTitle":"added the add income functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":138,"deletions":1}}},{"hash":"0de2467e5781906407d226b74596b4b404c645f6","isMergeCommit":true,"messageTitle":"Merge pull request #35 from bljhty/Bryan-AddIncomeFunction","messageBody":"added the add income functionality","fileTypesAndContributionMap":{}},{"hash":"c1415803bafbc7e40a5307c457495e1e36b2ecd5","isMergeCommit":false,"messageTitle":"added JUnit test for income","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":0}}},{"hash":"029f86a4fc3183c74920521dd3dcee4cceebab78","isMergeCommit":true,"messageTitle":"Merge pull request #37 from bljhty/Bryan-AddIncomeJunit","messageBody":"added JUnit test for income","fileTypesAndContributionMap":{}},{"hash":"f7be2e6b37b7ffaf6f44b59e7a24debacf9c71fb","isMergeCommit":false,"messageTitle":"added the list income function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":0}}},{"hash":"95034b9c866c415fcfdc3c484ee9bb03b07f4822","isMergeCommit":true,"messageTitle":"Merge pull request #38 from bljhty/Bryan-ListCommand","messageBody":"added the list income function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"3f5c8ecd561ac20483518ba49f808358d9a31ba6","isMergeCommit":false,"messageTitle":"Added JUnit Test for income parser class,","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":54,"deletions":0}}},{"hash":"efecaa2ff6828936f318ec93f7fbbaf73b07cc47","isMergeCommit":true,"messageTitle":"Merge pull request #41 from bljhty/Bryan-AddJUnitTestIncomeParser","messageBody":"Added JUnit Test for income parser class edit minor bugs in expense class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"b96b8820f857121283457a520bfb762ef2ca2c6c","isMergeCommit":false,"messageTitle":"minor bug fixing and added javadoc","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":207,"deletions":6}}},{"hash":"a70966392c50aeb619d6895abd2a93f46c66e25a","isMergeCommit":true,"messageTitle":"Merge pull request #45 from bljhty/Bryan-bug_fixing","messageBody":"minor bug fixing and added javadoc","fileTypesAndContributionMap":{}},{"hash":"71eb946d765b405e018d22d60330e083e2a3bf13","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":174},"other":{"insertions":0,"deletions":0}}},{"hash":"b8a856dcc26db8ede044ef2bcac0852bcdb3838e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":174,"deletions":0}}},{"hash":"0789a529e66efa74edc3ba2583b1152f5bd69e45","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"57b072ff69089aa71edecde0e12ab91907656d56","isMergeCommit":true,"messageTitle":"Merge pull request #46 from bljhty/Bryan-bug_fixing","messageBody":"Bryan bug fixing","fileTypesAndContributionMap":{}},{"hash":"c90e926cc7b8751df51dfe7387c0ceacd15a7845","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"dcf55f397a5193fa02c0554cb721f55d6a3c6beb","isMergeCommit":true,"messageTitle":"Merge pull request #48 from bljhty/master","messageBody":"no message","fileTypesAndContributionMap":{}},{"hash":"ac5acc3ceba4fdb5cbc729e88eab16b5edd239d0","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"8f9b494475f77182a35a655b40d0fefb1fcade21","isMergeCommit":true,"messageTitle":"Merge pull request #50 from bljhty/master","messageBody":"no message","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"34f306cc9e5ca4ef28e89e0e87179ab88d3256cf","isMergeCommit":false,"messageTitle":"edited testsh and expected output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"670b7ab465c3ec3436b883f873cac7cfdc7acd24","isMergeCommit":true,"messageTitle":"Merge pull request #60 from bljhty/Bryan-edit_testsh","messageBody":"edited testsh and expected output","fileTypesAndContributionMap":{}},{"hash":"c6c923f637432277043fe840fd3fbb92c8a7ef25","isMergeCommit":false,"messageTitle":"added JUnit test for expenseparser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"test-code":{"insertions":183,"deletions":0}}},{"hash":"aac9e86c2c1b463fa8173ffe62fba62f4b6a2ef0","isMergeCommit":true,"messageTitle":"Merge pull request #63 from bljhty/Bryan-Expense_parser_Junit","messageBody":"added JUnit test for expenseparser class","fileTypesAndContributionMap":{}},{"hash":"15fed349abbdcd95755be03abeea18551923713e","isMergeCommit":false,"messageTitle":"updated JUnit for income parser, added javadoc for both expense parsertest and incomeParserTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2},"test-code":{"insertions":202,"deletions":12}}},{"hash":"a06eab9c52dfff4de8d0dbdb26bc4e9b3e10f380","isMergeCommit":true,"messageTitle":"Merge pull request #64 from bljhty/Bryan-income_parser_Junit_updated","messageBody":"updated JUnit for income parser, added javadoc for both expense parse…","fileTypesAndContributionMap":{}},{"hash":"762b83d89c0b39cc91a5d31d4ad2a67e1b0b36f3","isMergeCommit":false,"messageTitle":"added expense JUnit test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":69,"deletions":0}}},{"hash":"1d5706ae2c956e8475671e773ef038d27cd7c6d8","isMergeCommit":true,"messageTitle":"Merge pull request #67 from bljhty/Bryan-expenseTest","messageBody":"added expense JUnit test","fileTypesAndContributionMap":{}},{"hash":"97a9b3858d57d9a4bd339e98ed54c363175e83f4","isMergeCommit":false,"messageTitle":"added balanceTest and javadoc comments for balanceTest and expenseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":117,"deletions":0}}},{"hash":"433aeba0e3f9ff256e9e6b065a78e1b4f7f5c7e7","isMergeCommit":true,"messageTitle":"Merge pull request #70 from bljhty/Bryan-balanceTest","messageBody":"added balanceTest and javadoc comments for balanceTest and expenseTest","fileTypesAndContributionMap":{}},{"hash":"e76caab50cc07de5b2bc2c5f80489b2d90c27f1b","isMergeCommit":false,"messageTitle":"change \"bye\" to \"exit\" to exit the program","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"e6badcdf8a009ff91209efb521c0b17f9286079b","isMergeCommit":true,"messageTitle":"Merge pull request #71 from bljhty/Bryan-balanceTest","messageBody":"change \"bye\" to \"exit\" to exit the program","fileTypesAndContributionMap":{}},{"hash":"03b17833325f95216af8857e242d3b5af65f5219","isMergeCommit":false,"messageTitle":"added logging and assertions for incomeLister, Income, incomeManager, FinancialRecord, IncomeParser and Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":13},"other":{"insertions":4,"deletions":0}}},{"hash":"4ee809172b0d94fa8ca80d620d1a4bd10557de51","isMergeCommit":true,"messageTitle":"Merge pull request #73 from bljhty/Bryan-logging_and_assertions","messageBody":"added logging and assertions for incomeLister, Income, incomeManager,…","fileTypesAndContributionMap":{}},{"hash":"6bbab986b5e67c176ec482d39cf69b3c983c5e5f","isMergeCommit":false,"messageTitle":"updated userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":80,"deletions":18}}},{"hash":"6edfa2b4c4816e4386bf978ec444c8e680f003c0","isMergeCommit":true,"messageTitle":"Merge pull request #74 from bljhty/Bryan-UserGuide_update","messageBody":"updated userguide","tags":["KaChinnnngv1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"62b94094ee4923eefe2d4b8c4d1cefc02f85ed08","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":5}}},{"hash":"37718df880e8caf3a75c0f1c6e3565e6d2642bf2","isMergeCommit":true,"messageTitle":"Merge pull request #75 from bljhty/Bryan-EditCode","messageBody":"no message","fileTypesAndContributionMap":{}},{"hash":"bfd698b4dd26861ced11ba5ea65704c8bb1a847d","isMergeCommit":false,"messageTitle":"edited bug where logger information is being displayed in the output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":5}}}]},{"date":"2023-10-23","commitResults":[{"hash":"7d763fd902700e4578442d4de7ba7cefd9c09411","isMergeCommit":false,"messageTitle":"added the find function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":22}}},{"hash":"3f46ad0f1c25480383c5cb30df8dcda0af1ef9e2","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":235,"deletions":0}}},{"hash":"a8cdf9a8a14b68c448977a80a12185508edc01cf","isMergeCommit":true,"messageTitle":"Merge pull request #87 from bljhty/Bryan-Find_function","messageBody":"Bryan find function","fileTypesAndContributionMap":{}},{"hash":"39b7a99a518e790ecf6dd123857df4caab783b36","isMergeCommit":false,"messageTitle":"made it such that the log file will be in a folder instead","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":4}}},{"hash":"7cc042582af15a30ae4e2af2394a3a460eb27e82","isMergeCommit":true,"messageTitle":"Merge pull request #88 from bljhty/Bryan-log_fixing","messageBody":"made it such that the log file will be in a folder instead","fileTypesAndContributionMap":{}},{"hash":"6ff08dd325033acea8bf60352d53eda3ef747616","isMergeCommit":false,"messageTitle":"clean up income manager class and change input formats","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":18}}},{"hash":"10a9c5009055e8bd38e4fe5031d2d4467dd0e41a","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"24ab533265f7e3716b86eb8331f978e71c3a4734","isMergeCommit":true,"messageTitle":"Merge pull request #90 from bljhty/Bryan-edit_IncomeManager","messageBody":"Bryan edit income manager","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"8636ab7ee8656732e70f001cefbaeb15ee4ee6cb","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":36}}},{"hash":"7eb3bc044234d200d13e2442a134686f1e191bbb","isMergeCommit":true,"messageTitle":"Merge pull request #91 from bljhty/Bryan-logging+assertion_findcommand","messageBody":"added logging and assertions to findCommand class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"106754518beae746363af4b8c58c0193c9674ba4","isMergeCommit":false,"messageTitle":"added DG for incomeManager","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":6},"docs":{"insertions":10,"deletions":0}}},{"hash":"1d7a839da12b7de630333477f4fbbed1adfc6797","isMergeCommit":true,"messageTitle":"Merge pull request #95 from bljhty/Bryan-updating_developerguide","messageBody":"added DG for incomeManager","fileTypesAndContributionMap":{}},{"hash":"5b832a32301924c877b0fb2ef0598806b54b234e","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0},"docs":{"insertions":25,"deletions":5}}},{"hash":"e7dd967864e94d72cc75560ded319bc5e2c2ad28","isMergeCommit":true,"messageTitle":"Merge pull request #101 from bljhty/Bryan-updating_developerguide(2)","messageBody":"updated UserGuide for FindCommand class and edited code snippets","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"56a7e40cb4436f0d20b0ad0e33ce1272451cea1b","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":8}}}]},{"date":"2023-10-27","commitResults":[{"hash":"5b1224aa7da13e18d1570d4b4a09dc4f20e20c14","isMergeCommit":true,"messageTitle":"Merge pull request #103 from bljhty/Bryan-FincCommand_JavaDoc","messageBody":"added javadoc comments for FindCommands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"b05cd0f22923c8b7d7ae4b9243a60fda79d97f4c","isMergeCommit":false,"messageTitle":"Added JUnit test for find command and handled bugs related to find command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":64,"deletions":25}}},{"hash":"01438403a54ddeaf1132179c5d490712d6d4d031","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":464,"deletions":0}}},{"hash":"09cfe83656699dd449f045a0b1f748e1ef641c1e","isMergeCommit":true,"messageTitle":"Merge pull request #104 from KenCheung18/Javadoc-for-clear-function","messageBody":"Javadoc for clear function","fileTypesAndContributionMap":{}},{"hash":"ec4f5e59793333273e142ceb6ad2c8351ef73f58","isMergeCommit":true,"messageTitle":"Merge pull request #108 from bljhty/Bryan-FindCommand_Test","messageBody":"Bryan find command test","fileTypesAndContributionMap":{}}]}],"Hongzhii":[{"date":"2023-10-12","commitResults":[{"hash":"374988e8cd3295fcc475bc7750fb4b9fb00876cb","isMergeCommit":false,"messageTitle":"add expense class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"e2c1a08d38fb0980168c121d98f9a550d41908d9","isMergeCommit":true,"messageTitle":"Merge pull request #39 from Hongzhii/add-expense-class","messageBody":"add expense class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"fdb794183e31163e1516dff81559a932400e697b","isMergeCommit":false,"messageTitle":"add expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":299,"deletions":2}}},{"hash":"f9620e70b7be8738cd6fad83aac026b9a6e3ac86","isMergeCommit":false,"messageTitle":"fix coding standards issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-16","commitResults":[{"hash":"098a0492e5d4180fdc5f363384f4dad966b685fd","isMergeCommit":true,"messageTitle":"Merge pull request #43 from Hongzhii/add-expense-class","messageBody":"create different expense categories","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"d0a0911eb6616b1d618539343913144ab3b96c0f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Hongzhii/tp into add-expense-class","messageBody":"* \u0027master\u0027 of https://github.com/Hongzhii/tp:\n no message\n no message\n no message\n no message\n no message\n minor bug fixing and added javadoc\n add the help function\n\n# Conflicts:\n#\tsrc/main/java/seedu/duke/Duke.java\n#\tsrc/main/java/seedu/duke/commands/ExpenseLister.java\n#\tsrc/main/java/seedu/duke/commands/ExpenseManager.java\n#\tsrc/main/java/seedu/duke/parser/ExpenseParser.java\n#\tsrc/main/java/seedu/duke/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"6dc33217fab2dad56a7817bcdf9c0bb669e527f4","isMergeCommit":true,"messageTitle":"Merge pull request #52 from Hongzhii/add-expense-class","messageBody":"Add expense class","fileTypesAndContributionMap":{}},{"hash":"2982cf9151c17da188b454e61f5d05a6f1bcd26c","isMergeCommit":true,"messageTitle":"Merge pull request #51 from AY2324S1-CS2113-T18-3/add-expense-class","messageBody":"Add expense class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"ab30caec1cd31ad109d5be413d60a431098f662a","isMergeCommit":false,"messageTitle":"add java doc","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":110,"deletions":8}}},{"hash":"c6826012f1f2fa18afe80e27196b98d85a2da144","isMergeCommit":false,"messageTitle":"fix coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"303628c0a8d489a99a106bfe47ec1b5fd3100075","isMergeCommit":true,"messageTitle":"Merge pull request #66 from Hongzhii/master","messageBody":"add java doc","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"7ee4535ebcf6a796938d1ad67f2ab82ca0537831","isMergeCommit":true,"messageTitle":"Merge pull request #82 from bljhty/Bryan_LOGGING_bug","messageBody":"edited bug where logger information is being displayed in the output","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"57091e1603dc4a51c8d4bfa9a65bada3c4bbec1b","isMergeCommit":false,"messageTitle":"change toString method to include enum type information","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"64994adc4f2dd4af9b021e5f8dae61fbd6298882","isMergeCommit":false,"messageTitle":"update parser and expense manager","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":41,"deletions":11}}},{"hash":"8b2ce625f1678c12fc73a87d1a8be704963c151e","isMergeCommit":false,"messageTitle":"update unit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":5},"test-code":{"insertions":9,"deletions":5}}},{"hash":"e3becbb79486d7af284a270c67bc444fe990a487","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-type-functionality-to-expenses\u0027","messageBody":"* add-type-functionality-to-expenses:\n update unit tests\n update i/o tests\n update parser and expense manager\n change toString method to include enum type information\n","fileTypesAndContributionMap":{}},{"hash":"e0ff3d162d26673c9bdac78b0a8713dd7e4ed7b8","isMergeCommit":true,"messageTitle":"Merge pull request #105 from Hongzhii/master","messageBody":"add type functionality to expenses","fileTypesAndContributionMap":{}},{"hash":"15dda310b6cb156064f1f84aaa80d58b27f774eb","isMergeCommit":false,"messageTitle":"update developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":0}}},{"hash":"fd1e0031d8dfc29a95d461b467eda6a3eeff737b","isMergeCommit":true,"messageTitle":"Merge branch \u0027update-developer-guide\u0027","messageBody":"* update-developer-guide:\n update developer guide\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"356e34b25e6d229286bcd1070a0fd092ec09c2c5","isMergeCommit":true,"messageTitle":"Merge pull request #106 from Hongzhii/master","messageBody":"update DG","fileTypesAndContributionMap":{}}]}],"KenCheung18":[{"date":"2023-10-05","commitResults":[{"hash":"ff771b65c44f9dd8452f28d33c98131f6ebdaca3","isMergeCommit":false,"messageTitle":"AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"169d557cd8aeb41bfc052c8baa84595ffdfb91a6","isMergeCommit":true,"messageTitle":"Merge pull request #3 from KenCheung18/AboutUs","messageBody":"AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"329946ddf88f470e861a65d067db83b89ac74e38","isMergeCommit":false,"messageTitle":"add the help function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":0}}},{"hash":"4451eda2b70e6fac03872dd33858a8d24c486e4c","isMergeCommit":true,"messageTitle":"Merge pull request #44 from KenCheung18/Usage-instructions","messageBody":"add the help function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"bcae9628b344bc6cb291a079aca607faff1fe7db","isMergeCommit":false,"messageTitle":"Solve conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"85c13e1244776c0f0866cdcce5a35676a6c27715","isMergeCommit":false,"messageTitle":"Solve another conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"10b6b25ca6c8901d81089ea4d3f1914ea47a41df","isMergeCommit":false,"messageTitle":"Solve minor bug on switch statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"d92551230ce733460145529d1b989be404f9e7d2","isMergeCommit":true,"messageTitle":"Merge pull request #53 from KenCheung18/Bug-solve-for-expense-class","messageBody":"Solve merge conflict","fileTypesAndContributionMap":{}},{"hash":"963101c37e2e2463d2b56dbbc75f772ae778bee2","isMergeCommit":false,"messageTitle":"Balance Function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":0}}},{"hash":"b61608b37db593b319f5b214c27c1ed7a2a47202","isMergeCommit":false,"messageTitle":"Minor bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"fb0d1b79960c19af7b291b56b8cd9925b24cb710","isMergeCommit":true,"messageTitle":"Merge pull request #58 from KenCheung18/Balance","messageBody":"Balance Function","fileTypesAndContributionMap":{}},{"hash":"f186609c39c31189eeeebeb89d7dc00b32bea648","isMergeCommit":false,"messageTitle":"Bug fix on balance function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"2796193e5f7ec9efb7eb8c7f92d5ae2b26eadea0","isMergeCommit":true,"messageTitle":"Merge pull request #59 from KenCheung18/Balance-bug-fix","messageBody":"Bug fix on balance function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"39b92cb3edb128ffb3386d0d23a3d6a3a9e47010","isMergeCommit":false,"messageTitle":"javadoc for Balance and UsageInstructions class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":1}}},{"hash":"e8cbb9f2e94ac946debabad31cd1e21edd590e4a","isMergeCommit":false,"messageTitle":"minor bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"b33182fbf46985067b73ce658ac1e1b8966a7a07","isMergeCommit":false,"messageTitle":"javadoc bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"2e540a1baf3784a8c9fff244e353199805ff168c","isMergeCommit":true,"messageTitle":"Merge pull request #65 from KenCheung18/Balance-add-javadoc","messageBody":"Add javadoc on balance class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"beed4e277ab87a56865f2feec2c41315f7618e61","isMergeCommit":false,"messageTitle":"Save the income and expense to txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":0}}},{"hash":"30495ba61c5154c18acdbb12a2c764428fd20547","isMergeCommit":false,"messageTitle":"Get the incomes and expenses from txt file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":103,"deletions":0}}},{"hash":"44cc8ff64eed0b27d78091d1f94c36906df9c32b","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":56,"deletions":4}}},{"hash":"e1662d922f6415fc120ee9a46ec3707f937553f1","isMergeCommit":false,"messageTitle":"Style correction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":11}}},{"hash":"10a8106e93484afda5a7bb7cd116372428881158","isMergeCommit":true,"messageTitle":"Merge pull request #93 from KenCheung18/Storage-function","messageBody":"Storage function","fileTypesAndContributionMap":{}},{"hash":"26c32ef86ca87fb6f6602410781caa103fa14a10","isMergeCommit":false,"messageTitle":"Clear income function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":4}}},{"hash":"8a55003d9fe93008935363b856988d29a4ec29a0","isMergeCommit":false,"messageTitle":"Clear expense function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":0}}},{"hash":"cfbc0c5c9c5c2ef4805199276fcf827ff906dd42","isMergeCommit":false,"messageTitle":"Clear all and due with the user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":0}}},{"hash":"2194afadd9dd4b1617ef8cbd65f4fa2b2a11ca61","isMergeCommit":true,"messageTitle":"Merge pull request #94 from KenCheung18/Clear-function","messageBody":"Clear function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"89ad03ea042f3777bf018efe75838c4e3d533edc","isMergeCommit":false,"messageTitle":"Javadoc for clear expense class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}},{"hash":"d3c68cf8dd447bca268780ceaf2d82c7418d0e27","isMergeCommit":false,"messageTitle":"javadoc for clear income class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":2}}},{"hash":"cddaafdf18b36955f4abd56100af401907d41ae9","isMergeCommit":false,"messageTitle":"javadoc for clear all class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":4}}}]},{"date":"2023-10-27","commitResults":[{"hash":"76c95157c2e101d5b2ea291f63d431c02a2157d6","isMergeCommit":false,"messageTitle":"Create DG for GetFromTxt","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":0}}},{"hash":"7dfba6bfa646fc484614a76326af86af8d7ab514","isMergeCommit":true,"messageTitle":"Merge pull request #107 from KenCheung18/Developer-Guide-GetFromTxt","messageBody":"Create DG for GetFromTxt","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"limyuhching":{"docs":1,"functional-code":356,"test-code":278},"bljhty":{"docs":113,"functional-code":1225,"test-code":1117,"other":5},"Hongzhii":{"docs":36,"functional-code":437,"test-code":9},"KenCheung18":{"docs":13,"functional-code":419,"test-code":0}},"authorContributionVariance":{"limyuhching":4917.5093,"bljhty":35344.12,"Hongzhii":2989.4736,"KenCheung18":3246.9167},"authorDisplayNameMap":{"limyuhching":"CS2113-T18-3 LIM ..HING","bljhty":"CS2113-T18-3 LEE ..RYAN","Hongzhii":"CS2113-T18-3 EE H.. ZHI","KenCheung18":"CS2113-T18-3 CHEU..YUEN"}} diff --git a/AY2324S1-CS2113-T18-4_tp_master/authorship.json b/AY2324S1-CS2113-T18-4_tp_master/authorship.json index 83e472b..fc13512 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"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"run {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":6,"-":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/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":"{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":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"## Design","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"## **Implementation**","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"### Add transaction feature","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"The add transaction feature is facilitated by the `Parser` class which parses user input and creates a `Expense` or","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"`Allowance` object which extends from the `Transaction` class. The created `Transaction` object will be stored in a ","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"`TransactionList`.","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"Given below is an example usage scenario and how the add transaction mechanism behaves at each step.","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"Step 1. The user launches the application for the first time. The `TransactionList` will be initialized.","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"Step 2. The user executes `expense /amt 20 /date 24-10-2023 /desc Lunch /note Pasta /cat Food` command to create a","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"transaction. The `expense` command calls `Parser#parseExpense()` to create an `Expense` object. The ","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"`AddCommand#execute()` is then called to store the `Expense` object in the `TransactionList`.","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"The following sequence diagram shows how the add transaction operation works:","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"\u003cimg src\u003d\"images/AddTransactionSequenceDiagram.png\" width\u003d\"600\" /\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"vvhuiling"},"content":"### View transaction feature","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"vvhuiling"},"content":"In this section, I will describe the implementation of the \"View Transaction\" feature which allows users to ","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"vvhuiling"},"content":"view transaction details by specifying an index.","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"choonkit-nus"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"vvhuiling"},"content":"#### I. Architecture-Level Design","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"vvhuiling"},"content":"The \"View Transaction\" feature primarily involves the following components:","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"vvhuiling"},"content":"1. Parser: Responsible for interpreting user input and generating a ViewCommand object.","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"vvhuiling"},"content":"2. ViewCommand: A subclass of the Command class, created by the Parser to represent the \"view\" command.","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"vvhuiling"},"content":"3. Nuscents: The main application class that receives and executes commands. It invokes the execute() method of the ViewCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"vvhuiling"},"content":"4. TransactionList: A data structure to store and manage transactions.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"vvhuiling"},"content":"5. Transaction: Represents individual transactions.","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"vvhuiling"},"content":"6. UI: Handles user interface and messaging.","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"choonkit-nus"},"content":"#### II. Component-Level Design","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"vvhuiling"},"content":"1. Parser","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"vvhuiling"},"content":"The Parser class identifies the \"view\" command and extracts the taskIndex (transaction index) from the user\u0027s input.","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"vvhuiling"},"content":"2. ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"vvhuiling"},"content":"The ViewCommand object is created by the Parser. It encapsulates the user\u0027s request to view a specific transaction. This object is passed to the Nuscents class for execution.","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"vvhuiling"},"content":"3. Nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"vvhuiling"},"content":"In the Nuscents class, the execute() method of the ViewCommand is called, and the taskIndex is extracted from the command. It then calls the viewTransaction(taskIndex) method on the TransactionList.","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"vvhuiling"},"content":"4. TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"vvhuiling"},"content":"The TransactionList contains a list of Transaction objects. The viewTransaction(taskIndex) method retrieves the specific Transaction object based on the taskIndex.","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"vvhuiling"},"content":"5. Transaction","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"vvhuiling"},"content":"The Transaction class represents an individual transaction, and it contains all the relevant details of a transaction.","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"vvhuiling"},"content":"6. UI","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"vvhuiling"},"content":"The UI class displays the transaction details using the UI.showTransactionViewMessage method, which receives the Transaction object as input and presents the detailed transaction information to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"vvhuiling"},"content":"#### III. Alternatives Considered","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"vvhuiling"},"content":"While the current design is deemed suitable for our application, we did consider alternative approaches, such as ","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"vvhuiling"},"content":"integrating the view transaction functionality directly within the Nuscents class without introducing a ViewCommand. ","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"vvhuiling"},"content":"However, we opted for the current design to promote a cleaner separation of concerns and to facilitate future expansions ","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"vvhuiling"},"content":"and modifications.","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"vvhuiling"},"content":"The following sequence diagram shows how the add transaction operation works:","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"vvhuiling"},"content":"\u003cimg src\u003d\"images/ViewSequenceDiagram.png\" width\u003d\"600\" /\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":80,"author":{"gitId":"lckjosh"},"content":"### List transactions feature","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"lckjosh"},"content":"The list transaction feature is facilitated by the `Parser` class which parses user input and creates a new","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":"`ListCommand` object. The `ListCommand` object will get all the transactions in the `TransactionList` and display them ","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":"to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"lckjosh"},"content":"Given below is the example usage scenario and how the list transaction mechanism behaves at each step.","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"lckjosh"},"content":"Step 1. The user launches the application. The `TransactionList` will be initialized with the transactions stored in ","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"lckjosh"},"content":"the `nuscents.txt` file. If the file is empty or does not exist, the `TransactionList` will be empty. ","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":"Step 2. The user executes `list` command to list the transactions. The `list` command calls `ListCommand#execute()`, ","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"lckjosh"},"content":"which gets the transactions from the `TransactionList` and displays them to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"lckjosh"},"content":"The following sequence diagram shows how the list transaction operation works:","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"lckjosh"},"content":"\u003cimg src\u003d\"images/ListTransactionSequenceDiagram.png\" width\u003d\"600\" /\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"choonkit-nus"},"content":"In addition to that, the list transaction feature further computes and displays the net balance amount based on the ","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"choonkit-nus"},"content":"following formula (net balance \u003d total allowance amount - total expense amount). The `showTransactionList()` method in ","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"choonkit-nus"},"content":"the `Ui` class, it utilizes the float `netBalance` to store the net balance amount. When the `TransactionList` is","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"choonkit-nus"},"content":"iterated to print the transactions, it does a simple calculation based on whether it is an allowance or expense, to add","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"choonkit-nus"},"content":"or minus off respectively from the net balance.","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"aaronxujiachen"},"content":"### `helpCommand` Feature","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"aaronxujiachen"},"content":"#### I. Architecture-Level Design","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"aaronxujiachen"},"content":"The `helpCommand` feature serves as an informative component to assist users unfamiliar with the application commands. It integrates the following components:","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"aaronxujiachen"},"content":"1. **Parser**: Determines if the user input matches the `help` command.","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"aaronxujiachen"},"content":"2. **HelpCommand**: A subclass of the Command class. Represents the `help` command, and provides command details when executed.","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"aaronxujiachen"},"content":"3. **Nuscents**: The main application class that receives and executes commands. It invokes the `execute()` method of the `HelpCommand`.","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"aaronxujiachen"},"content":"4. **UI**: Manages user interface interactions, such as displaying the help menu.","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"aaronxujiachen"},"content":"#### II. Component-Level Design","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"aaronxujiachen"},"content":"1. **Parser**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"aaronxujiachen"},"content":" The `Parser` class recognizes the user\u0027s intention to access the help menu through the `help` keyword.","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"aaronxujiachen"},"content":"2. **HelpCommand**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"aaronxujiachen"},"content":" When the `Parser` identifies a `help` command, it instantiates a `HelpCommand` object. This object encapsulates the user\u0027s request to view the command instructions.","lastModifiedDate":"2023-10-27"},{"lineNumber":119,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":120,"author":{"gitId":"aaronxujiachen"},"content":"3. **Nuscents**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":121,"author":{"gitId":"aaronxujiachen"},"content":" Upon receiving the `HelpCommand` object, the `Nuscents` class triggers the `execute()` method of the `HelpCommand`.","lastModifiedDate":"2023-10-27"},{"lineNumber":122,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":123,"author":{"gitId":"aaronxujiachen"},"content":"4. **UI**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":124,"author":{"gitId":"aaronxujiachen"},"content":" The `UI` class is then responsible for fetching the `HELP_MENU` static string from the `HelpCommand` class and displaying it to the user. This ensures the user receives a comprehensive list of commands available in the application.","lastModifiedDate":"2023-10-27"},{"lineNumber":125,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":126,"author":{"gitId":"aaronxujiachen"},"content":"#### III. Alternatives Considered","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"aaronxujiachen"},"content":"Initially, we pondered over embedding the help details directly within the main application class, `Nuscents`. This would eliminate the need for a separate `HelpCommand` class. However, segregating the `HelpCommand` ensures better modularity, making future expansions or modifications seamless.","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":129,"author":{"gitId":"aaronxujiachen"},"content":"### `helpCommand` Usage Scenario","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"aaronxujiachen"},"content":"1. **Step 1**: The user launches the application. The initial screen appears.","lastModifiedDate":"2023-10-27"},{"lineNumber":132,"author":{"gitId":"aaronxujiachen"},"content":"2. **Step 2**: Unsure of the commands, the user inputs the `help` command.","lastModifiedDate":"2023-10-27"},{"lineNumber":133,"author":{"gitId":"aaronxujiachen"},"content":"3. **Step 3**: The application recognizes the command through the `Parser` and creates a `HelpCommand` object.","lastModifiedDate":"2023-10-27"},{"lineNumber":134,"author":{"gitId":"aaronxujiachen"},"content":"4. **Step 4**: The `Nuscents` class invokes the `execute()` method of the `HelpCommand`.","lastModifiedDate":"2023-10-27"},{"lineNumber":135,"author":{"gitId":"aaronxujiachen"},"content":"5. **Step 5**: The `UI` fetches the `HELP_MENU` string and displays the comprehensive list of commands to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":138,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":140,"author":{"gitId":"choonkit-nus"},"content":"### Target user profile","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"choonkit-nus"},"content":"SOC students at NUS who are tech-savvy, with limited allowance to monitor their finances and expense management","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"choonkit-nus"},"content":"while balancing aspects of university-life, academics and social activities. SOC students are known to be familiar with ","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"choonkit-nus"},"content":"CLI applications, which are often built to be efficient and clutter-free.","lastModifiedDate":"2023-10-27"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":145,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":146,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":148,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":149,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":150,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":151,"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":152,"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":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":154,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":155,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":158,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":160,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":161,"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":{"aaronxujiachen":33,"spaceman03":19,"lckjosh":17,"-":31,"vvhuiling":50,"choonkit-nus":11}},{"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":"docs/diagrams/AddTransactionSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"!include Style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"Participant \":Nuscents\" as nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"Participant \":Parser\" as parser PARSER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"Participant \":Expense\" as expense PARSER_COLOR_T1","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"Participant \":AddCommand\" as AddCommand COMMAND_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"Participant \":TransactionList\" as TransactionList UI_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"user -[USER_COLOR]\u003e nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"activate nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"nuscents -\u003e parser : parseCommand(\"expense /amt ...\")","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"activate parser PARSER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"parser -\u003e AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"activate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"AddCommand -\u003e parser : parseExpense(\"/amt ...\")","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"deactivate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"create expense","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":"parser -\u003e expense","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"activate expense","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"expense --\u003e parser","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":"deactivate expense","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"parser --\u003e nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":"deactivate parser","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":"nuscents -\u003e AddCommand : execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":"activate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":"AddCommand -\u003e TransactionList : add()","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":"activate TransactionList","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":"TransactionList --\u003e AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":"deactivate TransactionList","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":"AddCommand --\u003e nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"deactivate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"nuscents --\u003e user","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"deactivate nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"spaceman03":49}},{"path":"docs/diagrams/ListTransactionSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"lckjosh"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"lckjosh"},"content":"!include Style.puml","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"Participant \":Nuscents\" as nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"Participant \":Parser\" as parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"Participant \":ListCommand\" as ListCommand COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"Participant \":TransactionList\" as TransactionList UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"user -[USER_COLOR]\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":"activate nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"nuscents -\u003e parser : parseCommand(\"list\")","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":"activate parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":"create ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":"parser -\u003e ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":"activate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":"ListCommand --\u003e parser","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":"deactivate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":"parser --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":"deactivate parser","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":"nuscents -\u003e ListCommand : execute()","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":"activate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":"ListCommand -\u003e TransactionList : getTransactions()","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":"activate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":"TransactionList --\u003e ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"deactivate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"ListCommand --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":"deactivate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":"nuscents --\u003e user","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":"deactivate nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"lckjosh":42}},{"path":"docs/diagrams/ViewSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"vvhuiling"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"vvhuiling"},"content":"!include Style.puml","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"vvhuiling"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"vvhuiling"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"vvhuiling"},"content":"Participant \":Nuscents\" as nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"vvhuiling"},"content":"Participant \":Parser\" as parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"vvhuiling"},"content":"Participant \":ViewCommand\" as ViewCommand COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":"Participant \":TransactionList\" as TransactionList UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":"user -[USER_COLOR]\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"vvhuiling"},"content":"activate nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"vvhuiling"},"content":"nuscents -\u003e parser : parseCommand(\"view 1\")","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"vvhuiling"},"content":"activate parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"vvhuiling"},"content":"create ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"vvhuiling"},"content":"parser -\u003e ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"vvhuiling"},"content":"activate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"vvhuiling"},"content":"ViewCommand --\u003e parser","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"vvhuiling"},"content":"deactivate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"vvhuiling"},"content":"parser --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"vvhuiling"},"content":"deactivate parser","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"vvhuiling"},"content":"nuscents -\u003e ViewCommand : execute()","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"vvhuiling"},"content":"activate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"vvhuiling"},"content":"ViewCommand -\u003e TransactionList : viewTransaction()","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"vvhuiling"},"content":"activate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"vvhuiling"},"content":"TransactionList --\u003e ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"vvhuiling"},"content":"deactivate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"vvhuiling"},"content":"ViewCommand --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"vvhuiling"},"content":"deactivate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"vvhuiling"},"content":"nuscents --\u003e user","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"vvhuiling"},"content":"deactivate nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"vvhuiling"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"vvhuiling":42}},{"path":"docs/diagrams/style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR #1D8900","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T1 #83E769","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T2 #3FC71B","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T3 #166800","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T4 #0E4100","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR #ADD8E6","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T1 #C8C8FA","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T2 #6A6ADC","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR #9D0012","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T1 #F97181","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T2 #E41F36","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T3 #7B000E","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T4 #51000A","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR #A38300","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T1 #FFE374","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T2 #EDC520","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T3 #806600","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T2 #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"!define USER_COLOR #000000","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"spaceman03":25}},{"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":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"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":11,"lckjosh":6}},{"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/FilterCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"vvhuiling"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"vvhuiling"},"content":"public class FilterCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"vvhuiling"},"content":" private TransactionCategory category;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":" public FilterCommand(TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"vvhuiling"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"vvhuiling"},"content":" tasks.filterTransaction(category);","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"vvhuiling"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"vvhuiling":17}},{"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_DELETE \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_FIND \u003d \"find\";","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":" public static final String COMMAND_VIEW \u003d \"view\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" public static final String COMMAND_FILTER \u003d \"filter\";","lastModifiedDate":"2023-10-28"},{"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":11,"lckjosh":2,"vvhuiling":2}},{"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/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":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"public class TransactionList {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":" private ArrayList\u003cTransaction\u003e transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" public TransactionList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":" transactions \u003d new ArrayList\u003cTransaction\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":" public TransactionList(ArrayList\u003cTransaction\u003e transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":" this.transactions \u003d transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" public ArrayList\u003cTransaction\u003e getTransactions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" public void addTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":" transactions.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionAddedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" public void deleteTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" transactions.remove(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" Transaction.decreaseTransactionCountByOne();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionRemovedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" if (transaction.getDescription().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" isFound \u003d true;","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" results.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"lckjosh"},"content":" if (isFound) {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"lckjosh"},"content":" int resultCount \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : results) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" System.out.println(resultCount + \". \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"No matching tasks are found :/\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"vvhuiling"},"content":" public void viewTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"vvhuiling"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"vvhuiling"},"content":" Ui.showTransactionViewMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"vvhuiling"},"content":" public void filterTransaction(TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"vvhuiling"},"content":" ArrayList\u003cTransaction\u003e filteredTransactions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"vvhuiling"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"vvhuiling"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"vvhuiling"},"content":" if (transaction.getCategory() \u003d\u003d category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"vvhuiling"},"content":" filteredTransactions.add(transaction);","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"vvhuiling"},"content":" isFound \u003d true;","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"vvhuiling"},"content":" if (isFound) {","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"vvhuiling"},"content":" Ui.showFilterMessage(filteredTransactions, category);","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Filtered transactions in the category \" + category + \":\");","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"vvhuiling"},"content":" int transactionCount \u003d 1;","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"vvhuiling"},"content":" for (Transaction transaction : filteredTransactions) {","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"vvhuiling"},"content":" System.out.println(transactionCount + \". \" + transaction.getDescription());","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"vvhuiling"},"content":" transactionCount++;","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"vvhuiling"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"vvhuiling"},"content":" Ui.showFilterNotFoundMessage(category);","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spaceman03":3,"lckjosh":56,"vvhuiling":32}},{"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/data/transaction/Allowance.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"public class Allowance extends Transaction {","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" public Allowance(float amount, Date date, String description, String additionalInfo, AllowanceCategory category) {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" super(amount, date, description, additionalInfo, category);","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":9}},{"path":"src/main/java/seedu/nuscents/data/transaction/AllowanceCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public enum AllowanceCategory implements TransactionCategory {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" NO_ALLOWANCE_CATEGORY","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":5}},{"path":"src/main/java/seedu/nuscents/data/transaction/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"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":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" public Expense(float amount, Date date, String description, String additionalInfo, ExpenseCategory category) {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" super(amount, date, description, additionalInfo, category);","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":7,"lckjosh":3}},{"path":"src/main/java/seedu/nuscents/data/transaction/ExpenseCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public enum ExpenseCategory implements TransactionCategory {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" FOOD, ENTERTAINMENT, TRANSPORTATION, UTILITY, RENT, OTHERS, NO_EXPENSE_CATEGORY","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":5}},{"path":"src/main/java/seedu/nuscents/data/transaction/Transaction.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"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":" protected TransactionCategory category;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":" public Transaction(String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" count++;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"choonkit-nus"},"content":" public Transaction(float amount, Date date, String description) {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" count++;","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":"spaceman03"},"content":" public Transaction(float amount, Date date, String description, String additionalInfo,","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" TransactionCategory category) {","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" this.additionalInfo \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" count++;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"choonkit-nus"},"content":" public float getAmount() {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" return amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" public Date getDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" return date;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" public String getFormattedDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" return formatter.format(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" return description;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" public String getAdditionalInfo() {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" return additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" public TransactionCategory getCategory() {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" return getAmount() + \" | \" + getFormattedDate() + \" | \" + getDescription() + \" | \" + getAdditionalInfo()","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" + \" | \" + getCategory();","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" public static int getTransactionCount() {","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" return count;","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" * Decrease the task count by one when a task is deleted.","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" public static void decreaseTransactionCountByOne() {","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" count--;","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":48,"lckjosh":29,"choonkit-nus":3}},{"path":"src/main/java/seedu/nuscents/data/transaction/TransactionCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public interface TransactionCategory {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":4}},{"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":"vvhuiling"},"content":"import seedu.nuscents.commands.FilterCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.AllowanceCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_DELETE;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_FIND;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_VIEW;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_FILTER;","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_UNKNOWN_CATEGORY;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_DATE;","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_AMOUNT;","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX_ARGUMENTS;","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_FATAL_ERROR;","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_KEYWORD;","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"public class Parser {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"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":48,"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":49,"author":{"gitId":"lckjosh"},"content":" private static final String AMT_PATTERN \u003d \"/amt ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" private static final String DATE_PATTERN \u003d \"/date ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" private static final String DESC_PATTERN \u003d \"/desc ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" private static final String NOTE_PATTERN \u003d \"/note ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" private static final String CATEGORY_PATTERN \u003d \"/cat ([^/]+)\";","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" public static \u003cTaskList\u003e Command parseCommand(String text, TaskList tasks) throws NuscentsException,","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" String[] commandTypeAndArgs \u003d text.split(\" \", 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" String commandType \u003d commandTypeAndArgs[0];","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" String arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" if (commandTypeAndArgs.length \u003e 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" arguments \u003d commandTypeAndArgs[1];","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" arguments \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"aaronxujiachen"},"content":" case COMMAND_EXIT:","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" case COMMAND_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"lckjosh"},"content":" case COMMAND_ALLOWANCE:","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseAllowance(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" case COMMAND_EXPENSE:","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseExpense(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" case COMMAND_DELETE:","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" return new DeleteCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" case COMMAND_FIND:","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" return new FindCommand(parseFind(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"vvhuiling"},"content":" case COMMAND_VIEW:","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"vvhuiling"},"content":" return new ViewCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"vvhuiling"},"content":" case COMMAND_FILTER:","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"vvhuiling"},"content":" return new FilterCommand(parseCategory(arguments));","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"spaceman03"},"content":" case COMMAND_HELP:","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"aaronxujiachen"},"content":" if (arguments !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"aaronxujiachen"},"content":" throw new NuscentsException(\"OOPS!!! The correct format is \u0027help\u0027 alone.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" } catch (NuscentsException | ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" throw e;","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" }","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":" private static String datePatternValidation(String date) throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"spaceman03"},"content":" if (date.matches(DATE_PATTERN1)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" return \"d-M-yyyy\";","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spaceman03"},"content":" } else if (date.matches(DATE_PATTERN2)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" return \"yyyy-M-d\";","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","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":" public static Date parseDate(String date, String format, SimpleDateFormat formatter)","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" String separator;","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"spaceman03"},"content":" if (format.contains(\"-\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"-\";","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"/\";","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" String[] dateMonthYear \u003d date.split(separator);","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" if (Integer.parseInt(dateMonthYear[1]) \u003e 12) {","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"spaceman03"},"content":" return formatter.parse(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an allowance.","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Allowance} object","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the allowance is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"spaceman03"},"content":" public static Allowance parseAllowance(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"choonkit-nus"},"content":" float amount \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"choonkit-nus"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(extractValue(\"allowance\", arguments, AMT_PATTERN, false));","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"choonkit-nus"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"choonkit-nus"},"content":" throw new NuscentsException(MESSAGE_INVALID_AMOUNT);","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"choonkit-nus"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"allowance\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"allowance\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"allowance\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"spaceman03"},"content":" String category \u003d extractValue(\"allowance\", arguments, CATEGORY_PATTERN, true);","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"spaceman03"},"content":" AllowanceCategory allowanceCategory \u003d parseAllowanceCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"spaceman03"},"content":" return new Allowance(amount, formattedDate, description, additionalInformation, allowanceCategory);","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an expense.","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Expense} object","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the expense is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"spaceman03"},"content":" public static Expense parseExpense(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"lckjosh"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"choonkit-nus"},"content":" float amount \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"choonkit-nus"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(extractValue(\"expense\", arguments, AMT_PATTERN, false));","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"choonkit-nus"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"choonkit-nus"},"content":" throw new NuscentsException(MESSAGE_INVALID_AMOUNT);","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"choonkit-nus"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"expense\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":168,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"expense\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":169,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"expense\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"spaceman03"},"content":" String category \u003d extractValue(\"expense\", arguments, CATEGORY_PATTERN, true);","lastModifiedDate":"2023-10-23"},{"lineNumber":171,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory expenseCategory \u003d parseExpenseCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":172,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"spaceman03"},"content":" return new Expense(amount, formattedDate, description, additionalInformation, expenseCategory);","lastModifiedDate":"2023-10-23"},{"lineNumber":176,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":177,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":178,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":179,"author":{"gitId":"spaceman03"},"content":" public static ExpenseCategory parseExpenseCategory(String expenseCategory) throws NuscentsException {","lastModifiedDate":"2023-10-23"},{"lineNumber":180,"author":{"gitId":"spaceman03"},"content":" String expenseCategoryLowercase \u003d expenseCategory.toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":181,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory category \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":182,"author":{"gitId":"spaceman03"},"content":" switch (expenseCategoryLowercase) {","lastModifiedDate":"2023-10-23"},{"lineNumber":183,"author":{"gitId":"spaceman03"},"content":" case \"food\":","lastModifiedDate":"2023-10-23"},{"lineNumber":184,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.FOOD;","lastModifiedDate":"2023-10-23"},{"lineNumber":185,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":186,"author":{"gitId":"spaceman03"},"content":" case \"entertainment\":","lastModifiedDate":"2023-10-23"},{"lineNumber":187,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.ENTERTAINMENT;","lastModifiedDate":"2023-10-23"},{"lineNumber":188,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":189,"author":{"gitId":"spaceman03"},"content":" case \"transportation\":","lastModifiedDate":"2023-10-23"},{"lineNumber":190,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.TRANSPORTATION;","lastModifiedDate":"2023-10-23"},{"lineNumber":191,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":192,"author":{"gitId":"spaceman03"},"content":" case \"utility\":","lastModifiedDate":"2023-10-23"},{"lineNumber":193,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.UTILITY;","lastModifiedDate":"2023-10-23"},{"lineNumber":194,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":195,"author":{"gitId":"spaceman03"},"content":" case \"rent\":","lastModifiedDate":"2023-10-23"},{"lineNumber":196,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.RENT;","lastModifiedDate":"2023-10-23"},{"lineNumber":197,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":198,"author":{"gitId":"spaceman03"},"content":" case \"others\":","lastModifiedDate":"2023-10-23"},{"lineNumber":199,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.OTHERS;","lastModifiedDate":"2023-10-23"},{"lineNumber":200,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":201,"author":{"gitId":"spaceman03"},"content":" case \"\":","lastModifiedDate":"2023-10-23"},{"lineNumber":202,"author":{"gitId":"spaceman03"},"content":" case \"no_expense_category\":","lastModifiedDate":"2023-10-23"},{"lineNumber":203,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.NO_EXPENSE_CATEGORY;","lastModifiedDate":"2023-10-23"},{"lineNumber":204,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":205,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":206,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN_CATEGORY);","lastModifiedDate":"2023-10-23"},{"lineNumber":207,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":208,"author":{"gitId":"spaceman03"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":209,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":210,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":211,"author":{"gitId":"spaceman03"},"content":" public static AllowanceCategory parseAllowanceCategory(String allowanceCategory) throws NuscentsException {","lastModifiedDate":"2023-10-23"},{"lineNumber":212,"author":{"gitId":"spaceman03"},"content":" String allowanceCategoryLowerCase \u003d allowanceCategory.toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":213,"author":{"gitId":"spaceman03"},"content":" AllowanceCategory category \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":214,"author":{"gitId":"spaceman03"},"content":" switch (allowanceCategoryLowerCase) {","lastModifiedDate":"2023-10-23"},{"lineNumber":215,"author":{"gitId":"spaceman03"},"content":" case \"work\":","lastModifiedDate":"2023-10-23"},{"lineNumber":216,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":217,"author":{"gitId":"spaceman03"},"content":" case \"\":","lastModifiedDate":"2023-10-23"},{"lineNumber":218,"author":{"gitId":"spaceman03"},"content":" case \"no_allowance_category\":","lastModifiedDate":"2023-10-23"},{"lineNumber":219,"author":{"gitId":"spaceman03"},"content":" category \u003d AllowanceCategory.NO_ALLOWANCE_CATEGORY;","lastModifiedDate":"2023-10-23"},{"lineNumber":220,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":221,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":222,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN_CATEGORY);","lastModifiedDate":"2023-10-23"},{"lineNumber":223,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":224,"author":{"gitId":"spaceman03"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":225,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":226,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"vvhuiling"},"content":" public static TransactionCategory parseCategory(String transactionCategory) throws NuscentsException {","lastModifiedDate":"2023-10-28"},{"lineNumber":228,"author":{"gitId":"vvhuiling"},"content":" String allowanceCategoryLowerCase \u003d transactionCategory.toLowerCase();","lastModifiedDate":"2023-10-28"},{"lineNumber":229,"author":{"gitId":"vvhuiling"},"content":" TransactionCategory category \u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":230,"author":{"gitId":"vvhuiling"},"content":" switch (allowanceCategoryLowerCase) {","lastModifiedDate":"2023-10-28"},{"lineNumber":231,"author":{"gitId":"vvhuiling"},"content":" case \"work\":","lastModifiedDate":"2023-10-28"},{"lineNumber":232,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":233,"author":{"gitId":"vvhuiling"},"content":" case \"food\":","lastModifiedDate":"2023-10-28"},{"lineNumber":234,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.FOOD;","lastModifiedDate":"2023-10-28"},{"lineNumber":235,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":236,"author":{"gitId":"vvhuiling"},"content":" case \"entertainment\":","lastModifiedDate":"2023-10-28"},{"lineNumber":237,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.ENTERTAINMENT;","lastModifiedDate":"2023-10-28"},{"lineNumber":238,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":239,"author":{"gitId":"vvhuiling"},"content":" case \"transportation\":","lastModifiedDate":"2023-10-28"},{"lineNumber":240,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.TRANSPORTATION;","lastModifiedDate":"2023-10-28"},{"lineNumber":241,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":242,"author":{"gitId":"vvhuiling"},"content":" case \"utility\":","lastModifiedDate":"2023-10-28"},{"lineNumber":243,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.UTILITY;","lastModifiedDate":"2023-10-28"},{"lineNumber":244,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":245,"author":{"gitId":"vvhuiling"},"content":" case \"rent\":","lastModifiedDate":"2023-10-28"},{"lineNumber":246,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.RENT;","lastModifiedDate":"2023-10-28"},{"lineNumber":247,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":248,"author":{"gitId":"vvhuiling"},"content":" case \"others\":","lastModifiedDate":"2023-10-28"},{"lineNumber":249,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.OTHERS;","lastModifiedDate":"2023-10-28"},{"lineNumber":250,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":251,"author":{"gitId":"vvhuiling"},"content":" default:","lastModifiedDate":"2023-10-28"},{"lineNumber":252,"author":{"gitId":"vvhuiling"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN_CATEGORY);","lastModifiedDate":"2023-10-28"},{"lineNumber":253,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":254,"author":{"gitId":"vvhuiling"},"content":" return category;","lastModifiedDate":"2023-10-28"},{"lineNumber":255,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":256,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":257,"author":{"gitId":"spaceman03"},"content":" public static int parseTaskIndex(String arguments) throws IndexOutOfBoundsException,","lastModifiedDate":"2023-10-16"},{"lineNumber":258,"author":{"gitId":"spaceman03"},"content":" NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":259,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":260,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":261,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":262,"author":{"gitId":"vvhuiling"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"author":{"gitId":"spaceman03"},"content":" int taskIndex \u003d Integer.parseInt(arguments);","lastModifiedDate":"2023-10-16"},{"lineNumber":264,"author":{"gitId":"lckjosh"},"content":" if (taskIndex \u003e Transaction.getTransactionCount() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":265,"author":{"gitId":"spaceman03"},"content":" throw new IndexOutOfBoundsException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":266,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":267,"author":{"gitId":"spaceman03"},"content":" return taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":268,"author":{"gitId":"vvhuiling"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":269,"author":{"gitId":"vvhuiling"},"content":" throw new NuscentsException(MESSAGE_INVALID_INDEX_ARGUMENTS);","lastModifiedDate":"2023-10-18"},{"lineNumber":270,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":271,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":272,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":273,"author":{"gitId":"spaceman03"},"content":" public static String parseFind(String arguments) throws NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":274,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":275,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_KEYWORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":276,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":277,"author":{"gitId":"spaceman03"},"content":" return arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":278,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":279,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":280,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":281,"author":{"gitId":"lckjosh"},"content":" private static String extractValue(String command, String input, String pattern, boolean isOptional)","lastModifiedDate":"2023-10-17"},{"lineNumber":282,"author":{"gitId":"lckjosh"},"content":" throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":283,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Pattern p \u003d java.util.regex.Pattern.compile(pattern);","lastModifiedDate":"2023-10-17"},{"lineNumber":284,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Matcher m \u003d p.matcher(input);","lastModifiedDate":"2023-10-17"},{"lineNumber":285,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":286,"author":{"gitId":"lckjosh"},"content":" if (m.find()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":287,"author":{"gitId":"lckjosh"},"content":" return m.group(1).trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":288,"author":{"gitId":"lckjosh"},"content":" } else if (!isOptional) {","lastModifiedDate":"2023-10-17"},{"lineNumber":289,"author":{"gitId":"lckjosh"},"content":" switch (command) {","lastModifiedDate":"2023-10-17"},{"lineNumber":290,"author":{"gitId":"lckjosh"},"content":" case \"allowance\":","lastModifiedDate":"2023-10-17"},{"lineNumber":291,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":292,"author":{"gitId":"lckjosh"},"content":" case \"expense\":","lastModifiedDate":"2023-10-17"},{"lineNumber":293,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":294,"author":{"gitId":"lckjosh"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":295,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_FATAL_ERROR);","lastModifiedDate":"2023-10-17"},{"lineNumber":296,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":297,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":298,"author":{"gitId":"lckjosh"},"content":" return \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":299,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":300,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":177,"lckjosh":62,"vvhuiling":44,"choonkit-nus":12}},{"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":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.AllowanceCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.parser.Parser.parseAllowanceCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.parser.Parser.parseExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"public class Storage {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" private static final Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" private String filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" FileHandler fileHandler \u003d new FileHandler(\"storage.log\");","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" logger.addHandler(fileHandler);","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" logger.setUseParentHandlers(false);","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" logger.log(Level.SEVERE, \"Logging to file not working.\", e);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" public String getPath() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" return filePath;","lastModifiedDate":"2023-10-18"},{"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":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" * Reads data from the storage file and return it.","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" * @return an arraylist of tasks","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" public ArrayList\u003cTransaction\u003e readDataFromFile() throws FileNotFoundException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to read data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" transactionDecoder(file, transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" } catch (ParseException | NuscentsException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Something went wrong when reading data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"All data successfully loaded\");","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"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":" * Decodes the storage data file and store it into the arraylist of tasks.","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" * @param file storage data file","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" * @param transactions arraylist of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage data file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" private static void transactionDecoder(File file, ArrayList\u003cTransaction\u003e transactions)","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" throws FileNotFoundException, ParseException, NuscentsException {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" Scanner data \u003d new Scanner(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" while (data.hasNext()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"lckjosh"},"content":" String transactionDetails \u003d data.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":" char transactionType \u003d transactionDetails.charAt(0);","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":" String[] columns;","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"choonkit-nus"},"content":" float amount;","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spaceman03"},"content":" Date date;","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"lckjosh"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"lckjosh"},"content":" String note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" String category\u003d \"\";","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":" switch (transactionType) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"lckjosh"},"content":" case \u0027A\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(columns[1]);","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"lckjosh"},"content":" note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" AllowanceCategory allowanceCategory \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" if (columns.length \u003e 5) {","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" category \u003d columns[5];","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" allowanceCategory \u003d parseAllowanceCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" transactions.add(new Allowance(amount, date, description, note, allowanceCategory));","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"lckjosh"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(columns[1]);","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory expenseCategory \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"spaceman03"},"content":" if (columns.length \u003e 5) {","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"spaceman03"},"content":" category \u003d columns[5];","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" expenseCategory \u003d parseExpenseCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":" transactions.add(new Expense(amount, date, description, note, expenseCategory));","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"spaceman03"},"content":" break;","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":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"spaceman03"},"content":" * Writes the data to the storage file.","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"spaceman03"},"content":" * Creates a new file if the file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"lckjosh"},"content":" * @param transactionList list of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spaceman03"},"content":" * @throws IOException If there were errors converting and/or storing the data to the file.","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"lckjosh"},"content":" public void writeToFile(TransactionList transactionList) throws IOException {","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"spaceman03"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to write data to file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Converting info to storage format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"spaceman03"},"content":" String output \u003d toStorageFormat(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"spaceman03"},"content":" fw.write(output);","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"spaceman03"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Transaction data successfully stored\");","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"spaceman03"},"content":" fw.close();","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"spaceman03"},"content":" private static String toStorageFormat(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"lckjosh"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"spaceman03"},"content":" return \"A\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"lckjosh"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"spaceman03"},"content":" return \"E\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":160,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Invalid transaction format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"spaceman03"},"content":" return null;","lastModifiedDate":"2023-10-16"},{"lineNumber":162,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":163,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":164,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":165,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":116,"lckjosh":46,"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-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" + \"--------------\";","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" public static final String LOGO \u003d \" __ __ __ __ ____ _____ _____ __ __ ________ ____\\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":"spaceman03"},"content":" + \"|__|\\\\___|________|______/ \\\\_____|_____|__|\\\\___| |__| |_____/\\n\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"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":13,"author":{"gitId":"aaronxujiachen"},"content":" public static final String HELP_MENU \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"aaronxujiachen"},"content":" \"- `list` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"aaronxujiachen"},"content":" \" Show a list of all entries.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"aaronxujiachen"},"content":" \"- `allowance /amt AMOUNT /date DATE /desc DESCRIPTION /cat CATEGORY \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an allowance.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"aaronxujiachen"},"content":" \"- `expense /amt AMOUNT /date DATE /desc DESCRIPTION /cat CATEGORY \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an expense.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"aaronxujiachen"},"content":" \"- `delete ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"aaronxujiachen"},"content":" \" Delete an entry.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"aaronxujiachen"},"content":" \"- `view ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"aaronxujiachen"},"content":" \" View an entry detail.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"aaronxujiachen"},"content":" \"- `exit` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"aaronxujiachen"},"content":" \" Exit the program.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"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":30,"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":31,"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":32,"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":33,"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":34,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"OOPS!!! This is an invalid transaction index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"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":36,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_LIST \u003d \"You have not made any transactions!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"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":38,"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":39,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_FATAL_ERROR \u003d \"OOPS!!! Fatal error occurred...\";","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"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":41,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_UNKNOWN_CATEGORY \u003d \"OOPS!!! The category you provided is not a valid category.\\n\"","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" + \"Valid categories are FOOD/ENTERTAINMENT/TRANSPORTATION/UTILITY/RENT/OTHERS.\";","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":17,"spaceman03":18,"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.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LOGO;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"public class Ui {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" private final Scanner input;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":" public Ui() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" public static void showLine() {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" public static void showWelcomeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Hello from\\n\" + LOGO);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"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":38,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" public static void showGoodbyeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(MESSAGE_EXIT);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","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":" public void showException(Exception e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionCount( ) {","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Now you have \" + Transaction.getTransactionCount() + \" transactions in the list.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionAddedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Got it. I\u0027ve added this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","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":"lckjosh"},"content":" public static void showTransactionRemovedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Noted. I\u0027ve removed this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionList(TransactionList transactionList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"choonkit-nus"},"content":" float netBalance \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" if (transactionList.getTransactions().isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" System.out.println(MESSAGE_EMPTY_LIST);","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"spaceman03"},"content":" assert transactionList.getTransactions() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the transactions in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-10s %-5s %n\",","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"spaceman03"},"content":" \"S/N\", \"TYPE\", \"AMOUNT\", \"DATE\", \"DESCRIPTION\", \"NOTE\", \"CATEGORY\");","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" int index \u003d transactions.indexOf(transaction) + 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" String additionalInfo \u003d transaction.getAdditionalInfo();","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" String note;","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" if (additionalInfo.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" note \u003d \"-\";","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spaceman03"},"content":" note \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"spaceman03"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Allowance\",","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"choonkit-nus"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"choonkit-nus"},"content":" transaction.getDescription(), note);","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"choonkit-nus"},"content":" netBalance +\u003d transaction.getAmount();","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" TransactionCategory expenseCategory \u003d transaction.getCategory();","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" String category;","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" if (expenseCategory \u003d\u003d ExpenseCategory.NO_EXPENSE_CATEGORY) {","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" category \u003d \"-\";","lastModifiedDate":"2023-10-23"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" category \u003d expenseCategory.toString();","lastModifiedDate":"2023-10-23"},{"lineNumber":109,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-10s %-5s %n\", index, \"Expense\",","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"choonkit-nus"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" transaction.getDescription(), note, category);","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"choonkit-nus"},"content":" netBalance -\u003d transaction.getAmount();","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"choonkit-nus"},"content":" System.out.println(\"Net Balance \u003d \" + String.format(\"%.2f\", netBalance));","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"choonkit-nus"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":" public static void showReadDataError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"No previous data found /:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"vvhuiling"},"content":" public static void showTransactionViewMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Following are details of the transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"vvhuiling"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: ALLOWANCE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"vvhuiling"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: EXPENSE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DATE: \" + transaction.getFormattedDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"AMOUNT: \" + transaction.getAmount());","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DESCRIPTION: \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"NOTE: \" + transaction.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"vvhuiling"},"content":" public static void showFilterMessage(ArrayList\u003cTransaction\u003e filteredTransactions, TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Filtered transactions in the category \" + category.toString() + \":\");","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"vvhuiling"},"content":" float netBalance \u003d 0;","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"vvhuiling"},"content":" for (Transaction transaction : filteredTransactions) {","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"vvhuiling"},"content":" int index \u003d filteredTransactions.indexOf(transaction) + 1;","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"vvhuiling"},"content":" String additionalInfo \u003d transaction.getAdditionalInfo();","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"vvhuiling"},"content":" String note;","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"vvhuiling"},"content":" if (additionalInfo.isEmpty()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"vvhuiling"},"content":" note \u003d \"-\";","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"vvhuiling"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"vvhuiling"},"content":" note \u003d additionalInfo;","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"vvhuiling"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Allowance\",","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"vvhuiling"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"vvhuiling"},"content":" transaction.getDescription(), note);","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"vvhuiling"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"vvhuiling"},"content":" netBalance +\u003d transaction.getAmount();","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"vvhuiling"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"vvhuiling"},"content":" netBalance -\u003d transaction.getAmount();","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Net Balance \u003d \" + String.format(\"%.2f\", netBalance));","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"vvhuiling"},"content":" public static void showFilterNotFoundMessage(TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"No transactions found in the category \" + category.toString());","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":173,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":174,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":175,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":176,"author":{"gitId":"spaceman03"},"content":" public static void showHelpMenu() {","lastModifiedDate":"2023-10-16"},{"lineNumber":177,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":178,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(Messages.HELP_MENU);","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":180,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":181,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":182,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":106,"lckjosh":14,"choonkit-nus":8,"vvhuiling":49}},{"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":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"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,"spaceman03":3,"lckjosh":65,"choonkit-nus":8,"vvhuiling":35}},{"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.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"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 Expense(50, formattedDate, \"Lunch\", \"Pasta\",","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory.FOOD));","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" return transactions;","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spaceman03":62}}] +[{"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"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"run {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":6,"-":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/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":"{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":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"## Design","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"## **Implementation**","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"### Add transaction feature","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"The add transaction feature is facilitated by the `Parser` class which parses user input and creates a `Expense` or","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"`Allowance` object which extends from the `Transaction` class. The created `Transaction` object will be stored in a ","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"`TransactionList`.","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"Given below is an example usage scenario and how the add transaction mechanism behaves at each step.","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"Step 1. The user launches the application for the first time. The `TransactionList` will be initialized.","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"Step 2. The user executes `expense /amt 20 /date 24-10-2023 /desc Lunch /note Pasta /cat Food` command to create a","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"transaction. The `expense` command calls `Parser#parseExpense()` to create an `Expense` object. The ","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"`AddCommand#execute()` is then called to store the `Expense` object in the `TransactionList`.","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"The following sequence diagram shows how the add transaction operation works:","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"\u003cimg src\u003d\"images/AddTransactionSequenceDiagram.png\" width\u003d\"600\" /\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"vvhuiling"},"content":"### View transaction feature","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"vvhuiling"},"content":"In this section, I will describe the implementation of the \"View Transaction\" feature which allows users to ","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"vvhuiling"},"content":"view transaction details by specifying an index.","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"choonkit-nus"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"vvhuiling"},"content":"#### I. Architecture-Level Design","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"vvhuiling"},"content":"The \"View Transaction\" feature primarily involves the following components:","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"vvhuiling"},"content":"1. Parser: Responsible for interpreting user input and generating a ViewCommand object.","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"vvhuiling"},"content":"2. ViewCommand: A subclass of the Command class, created by the Parser to represent the \"view\" command.","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"vvhuiling"},"content":"3. Nuscents: The main application class that receives and executes commands. It invokes the execute() method of the ViewCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"vvhuiling"},"content":"4. TransactionList: A data structure to store and manage transactions.","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"vvhuiling"},"content":"5. Transaction: Represents individual transactions.","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"vvhuiling"},"content":"6. UI: Handles user interface and messaging.","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"choonkit-nus"},"content":"#### II. Component-Level Design","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"vvhuiling"},"content":"1. Parser","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"vvhuiling"},"content":"The Parser class identifies the \"view\" command and extracts the taskIndex (transaction index) from the user\u0027s input.","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"vvhuiling"},"content":"2. ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"vvhuiling"},"content":"The ViewCommand object is created by the Parser. It encapsulates the user\u0027s request to view a specific transaction. This object is passed to the Nuscents class for execution.","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"vvhuiling"},"content":"3. Nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"vvhuiling"},"content":"In the Nuscents class, the execute() method of the ViewCommand is called, and the taskIndex is extracted from the command. It then calls the viewTransaction(taskIndex) method on the TransactionList.","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"vvhuiling"},"content":"4. TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"vvhuiling"},"content":"The TransactionList contains a list of Transaction objects. The viewTransaction(taskIndex) method retrieves the specific Transaction object based on the taskIndex.","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"vvhuiling"},"content":"5. Transaction","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"vvhuiling"},"content":"The Transaction class represents an individual transaction, and it contains all the relevant details of a transaction.","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"vvhuiling"},"content":"6. UI","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"vvhuiling"},"content":"The UI class displays the transaction details using the UI.showTransactionViewMessage method, which receives the Transaction object as input and presents the detailed transaction information to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"vvhuiling"},"content":"#### III. Alternatives Considered","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"vvhuiling"},"content":"While the current design is deemed suitable for our application, we did consider alternative approaches, such as ","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"vvhuiling"},"content":"integrating the view transaction functionality directly within the Nuscents class without introducing a ViewCommand. ","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"vvhuiling"},"content":"However, we opted for the current design to promote a cleaner separation of concerns and to facilitate future expansions ","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"vvhuiling"},"content":"and modifications.","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"vvhuiling"},"content":"The following sequence diagram shows how the add transaction operation works:","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"vvhuiling"},"content":"\u003cimg src\u003d\"images/ViewSequenceDiagram.png\" width\u003d\"600\" /\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":80,"author":{"gitId":"lckjosh"},"content":"### List transactions feature","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"lckjosh"},"content":"The list transaction feature is facilitated by the `Parser` class which parses user input and creates a new","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":"`ListCommand` object. The `ListCommand` object will get all the transactions in the `TransactionList` and display them ","lastModifiedDate":"2023-10-26"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":"to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"lckjosh"},"content":"Given below is the example usage scenario and how the list transaction mechanism behaves at each step.","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"lckjosh"},"content":"Step 1. The user launches the application. The `TransactionList` will be initialized with the transactions stored in ","lastModifiedDate":"2023-10-26"},{"lineNumber":88,"author":{"gitId":"lckjosh"},"content":"the `nuscents.txt` file. If the file is empty or does not exist, the `TransactionList` will be empty. ","lastModifiedDate":"2023-10-26"},{"lineNumber":89,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":"Step 2. The user executes `list` command to list the transactions. The `list` command calls `ListCommand#execute()`, ","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"lckjosh"},"content":"which gets the transactions from the `TransactionList` and displays them to the user.","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"lckjosh"},"content":"The following sequence diagram shows how the list transaction operation works:","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"lckjosh"},"content":"\u003cimg src\u003d\"images/ListTransactionSequenceDiagram.png\" width\u003d\"600\" /\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"choonkit-nus"},"content":"In addition to that, the list transaction feature further computes and displays the net balance amount based on the ","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"choonkit-nus"},"content":"following formula (net balance \u003d total allowance amount - total expense amount). The `showTransactionList()` method in ","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"choonkit-nus"},"content":"the `Ui` class, it utilizes the float `netBalance` to store the net balance amount. When the `TransactionList` is","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"choonkit-nus"},"content":"iterated to print the transactions, it does a simple calculation based on whether it is an allowance or expense, to add","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"choonkit-nus"},"content":"or minus off respectively from the net balance.","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"aaronxujiachen"},"content":"### `helpCommand` Feature","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"aaronxujiachen"},"content":"#### I. Architecture-Level Design","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"aaronxujiachen"},"content":"The `helpCommand` feature serves as an informative component to assist users unfamiliar with the application commands. It integrates the following components:","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"aaronxujiachen"},"content":"1. **Parser**: Determines if the user input matches the `help` command.","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"aaronxujiachen"},"content":"2. **HelpCommand**: A subclass of the Command class. Represents the `help` command, and provides command details when executed.","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"aaronxujiachen"},"content":"3. **Nuscents**: The main application class that receives and executes commands. It invokes the `execute()` method of the `HelpCommand`.","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"aaronxujiachen"},"content":"4. **UI**: Manages user interface interactions, such as displaying the help menu.","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"aaronxujiachen"},"content":"#### II. Component-Level Design","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"aaronxujiachen"},"content":"1. **Parser**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"aaronxujiachen"},"content":" The `Parser` class recognizes the user\u0027s intention to access the help menu through the `help` keyword.","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"aaronxujiachen"},"content":"2. **HelpCommand**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"aaronxujiachen"},"content":" When the `Parser` identifies a `help` command, it instantiates a `HelpCommand` object. This object encapsulates the user\u0027s request to view the command instructions.","lastModifiedDate":"2023-10-27"},{"lineNumber":119,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":120,"author":{"gitId":"aaronxujiachen"},"content":"3. **Nuscents**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":121,"author":{"gitId":"aaronxujiachen"},"content":" Upon receiving the `HelpCommand` object, the `Nuscents` class triggers the `execute()` method of the `HelpCommand`.","lastModifiedDate":"2023-10-27"},{"lineNumber":122,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":123,"author":{"gitId":"aaronxujiachen"},"content":"4. **UI**: ","lastModifiedDate":"2023-10-27"},{"lineNumber":124,"author":{"gitId":"aaronxujiachen"},"content":" The `UI` class is then responsible for fetching the `HELP_MENU` static string from the `HelpCommand` class and displaying it to the user. This ensures the user receives a comprehensive list of commands available in the application.","lastModifiedDate":"2023-10-27"},{"lineNumber":125,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":126,"author":{"gitId":"aaronxujiachen"},"content":"#### III. Alternatives Considered","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"aaronxujiachen"},"content":"Initially, we pondered over embedding the help details directly within the main application class, `Nuscents`. This would eliminate the need for a separate `HelpCommand` class. However, segregating the `HelpCommand` ensures better modularity, making future expansions or modifications seamless.","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":129,"author":{"gitId":"aaronxujiachen"},"content":"### `helpCommand` Usage Scenario","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"aaronxujiachen"},"content":"1. **Step 1**: The user launches the application. The initial screen appears.","lastModifiedDate":"2023-10-27"},{"lineNumber":132,"author":{"gitId":"aaronxujiachen"},"content":"2. **Step 2**: Unsure of the commands, the user inputs the `help` command.","lastModifiedDate":"2023-10-27"},{"lineNumber":133,"author":{"gitId":"aaronxujiachen"},"content":"3. **Step 3**: The application recognizes the command through the `Parser` and creates a `HelpCommand` object.","lastModifiedDate":"2023-10-27"},{"lineNumber":134,"author":{"gitId":"aaronxujiachen"},"content":"4. **Step 4**: The `Nuscents` class invokes the `execute()` method of the `HelpCommand`.","lastModifiedDate":"2023-10-27"},{"lineNumber":135,"author":{"gitId":"aaronxujiachen"},"content":"5. **Step 5**: The `UI` fetches the `HELP_MENU` string and displays the comprehensive list of commands to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":138,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":140,"author":{"gitId":"choonkit-nus"},"content":"### Target user profile","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"choonkit-nus"},"content":"SOC students at NUS who are tech-savvy, with limited allowance to monitor their finances and expense management","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"choonkit-nus"},"content":"while balancing aspects of university-life, academics and social activities. SOC students are known to be familiar with ","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"choonkit-nus"},"content":"CLI applications, which are often built to be efficient and clutter-free.","lastModifiedDate":"2023-10-27"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":145,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":146,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":148,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":149,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":150,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":151,"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":152,"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":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":154,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":155,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":158,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":160,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":161,"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":{"aaronxujiachen":33,"spaceman03":19,"lckjosh":17,"-":31,"vvhuiling":50,"choonkit-nus":11}},{"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":"docs/diagrams/AddTransactionSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"!include Style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"Participant \":Nuscents\" as nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"Participant \":Parser\" as parser PARSER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"Participant \":Expense\" as expense PARSER_COLOR_T1","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"Participant \":AddCommand\" as AddCommand COMMAND_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"Participant \":TransactionList\" as TransactionList UI_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"user -[USER_COLOR]\u003e nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"activate nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"nuscents -\u003e parser : parseCommand(\"expense /amt ...\")","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"activate parser PARSER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"parser -\u003e AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"activate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"AddCommand -\u003e parser : parseExpense(\"/amt ...\")","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"deactivate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"create expense","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":"parser -\u003e expense","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"activate expense","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"expense --\u003e parser","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":"deactivate expense","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"parser --\u003e nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":"deactivate parser","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":"nuscents -\u003e AddCommand : execute()","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":"activate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":"AddCommand -\u003e TransactionList : add()","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":"activate TransactionList","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":"TransactionList --\u003e AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":"deactivate TransactionList","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":"AddCommand --\u003e nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"deactivate AddCommand","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"nuscents --\u003e user","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"deactivate nuscents","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"spaceman03":49}},{"path":"docs/diagrams/ListTransactionSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"lckjosh"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"lckjosh"},"content":"!include Style.puml","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"Participant \":Nuscents\" as nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"Participant \":Parser\" as parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"Participant \":ListCommand\" as ListCommand COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"Participant \":TransactionList\" as TransactionList UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"user -[USER_COLOR]\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":"activate nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"nuscents -\u003e parser : parseCommand(\"list\")","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":"activate parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":"create ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":"parser -\u003e ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":"activate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":"ListCommand --\u003e parser","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":"deactivate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":"parser --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":"deactivate parser","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":"nuscents -\u003e ListCommand : execute()","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":"activate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":"ListCommand -\u003e TransactionList : getTransactions()","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":"activate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":"TransactionList --\u003e ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"deactivate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"ListCommand --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":"deactivate ListCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":"nuscents --\u003e user","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":"deactivate nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"lckjosh":42}},{"path":"docs/diagrams/ViewSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"vvhuiling"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"vvhuiling"},"content":"!include Style.puml","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"vvhuiling"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"vvhuiling"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"vvhuiling"},"content":"Participant \":Nuscents\" as nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"vvhuiling"},"content":"Participant \":Parser\" as parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"vvhuiling"},"content":"Participant \":ViewCommand\" as ViewCommand COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":"Participant \":TransactionList\" as TransactionList UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":"user -[USER_COLOR]\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"vvhuiling"},"content":"activate nuscents UI_COLOR_T1","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"vvhuiling"},"content":"nuscents -\u003e parser : parseCommand(\"view 1\")","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"vvhuiling"},"content":"activate parser PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"vvhuiling"},"content":"create ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"vvhuiling"},"content":"parser -\u003e ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"vvhuiling"},"content":"activate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"vvhuiling"},"content":"ViewCommand --\u003e parser","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"vvhuiling"},"content":"deactivate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"vvhuiling"},"content":"parser --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"vvhuiling"},"content":"deactivate parser","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"vvhuiling"},"content":"nuscents -\u003e ViewCommand : execute()","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"vvhuiling"},"content":"activate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"vvhuiling"},"content":"ViewCommand -\u003e TransactionList : viewTransaction()","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"vvhuiling"},"content":"activate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"vvhuiling"},"content":"TransactionList --\u003e ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"vvhuiling"},"content":"deactivate TransactionList","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"vvhuiling"},"content":"ViewCommand --\u003e nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"vvhuiling"},"content":"deactivate ViewCommand","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"vvhuiling"},"content":"nuscents --\u003e user","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"vvhuiling"},"content":"deactivate nuscents","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"vvhuiling"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"vvhuiling":42}},{"path":"docs/diagrams/style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR #1D8900","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T1 #83E769","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T2 #3FC71B","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T3 #166800","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"!define UI_COLOR_T4 #0E4100","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR #ADD8E6","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T1 #C8C8FA","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T2 #6A6ADC","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"!define PARSER_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR #9D0012","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T1 #F97181","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T2 #E41F36","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T3 #7B000E","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"!define COMMAND_COLOR_T4 #51000A","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR #A38300","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T1 #FFE374","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T2 #EDC520","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T3 #806600","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"!define STORAGE_COLOR_T2 #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"!define USER_COLOR #000000","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"spaceman03":25}},{"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":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"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":11,"lckjosh":6}},{"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/FilterCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"vvhuiling"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"vvhuiling"},"content":"public class FilterCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"vvhuiling"},"content":" private TransactionCategory category;","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":" public FilterCommand(TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"vvhuiling"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":" @Override","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"vvhuiling"},"content":" tasks.filterTransaction(category);","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"vvhuiling"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"vvhuiling":17}},{"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_DELETE \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_FIND \u003d \"find\";","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":" public static final String COMMAND_VIEW \u003d \"view\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" public static final String COMMAND_FILTER \u003d \"filter\";","lastModifiedDate":"2023-10-28"},{"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":11,"lckjosh":2,"vvhuiling":2}},{"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/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":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"public class TransactionList {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":" private ArrayList\u003cTransaction\u003e transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" public TransactionList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":" transactions \u003d new ArrayList\u003cTransaction\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":" public TransactionList(ArrayList\u003cTransaction\u003e transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":" this.transactions \u003d transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" public ArrayList\u003cTransaction\u003e getTransactions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" public void addTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":" transactions.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionAddedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" public void deleteTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" transactions.remove(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" Transaction.decreaseTransactionCountByOne();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionRemovedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" if (transaction.getDescription().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" isFound \u003d true;","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" results.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"lckjosh"},"content":" if (isFound) {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"lckjosh"},"content":" int resultCount \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : results) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" System.out.println(resultCount + \". \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"No matching tasks are found :/\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"vvhuiling"},"content":" public void viewTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"vvhuiling"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"vvhuiling"},"content":" Ui.showTransactionViewMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"vvhuiling"},"content":" public void filterTransaction(TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"vvhuiling"},"content":" ArrayList\u003cTransaction\u003e filteredTransactions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"vvhuiling"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"vvhuiling"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"vvhuiling"},"content":" if (transaction.getCategory() \u003d\u003d category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"vvhuiling"},"content":" filteredTransactions.add(transaction);","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"vvhuiling"},"content":" isFound \u003d true;","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"vvhuiling"},"content":" if (isFound) {","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"vvhuiling"},"content":" Ui.showFilterMessage(filteredTransactions, category);","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Filtered transactions in the category \" + category + \":\");","lastModifiedDate":"2023-10-28"},{"lineNumber":79,"author":{"gitId":"vvhuiling"},"content":" int transactionCount \u003d 1;","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"vvhuiling"},"content":" for (Transaction transaction : filteredTransactions) {","lastModifiedDate":"2023-10-28"},{"lineNumber":81,"author":{"gitId":"vvhuiling"},"content":" System.out.println(transactionCount + \". \" + transaction.getDescription());","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"vvhuiling"},"content":" transactionCount++;","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"vvhuiling"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"vvhuiling"},"content":" Ui.showFilterNotFoundMessage(category);","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spaceman03":3,"lckjosh":56,"vvhuiling":32}},{"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/data/transaction/Allowance.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"public class Allowance extends Transaction {","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" public Allowance(float amount, Date date, String description, String additionalInfo, AllowanceCategory category) {","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" super(amount, date, description, additionalInfo, category);","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":9}},{"path":"src/main/java/seedu/nuscents/data/transaction/AllowanceCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public enum AllowanceCategory implements TransactionCategory {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":" SALARY, ALLOWANCE, INVESTMENTS, GIFTS, OTHERS, NO_ALLOWANCE_CATEGORY","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":4,"lckjosh":1}},{"path":"src/main/java/seedu/nuscents/data/transaction/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"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":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" public Expense(float amount, Date date, String description, String additionalInfo, ExpenseCategory category) {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" super(amount, date, description, additionalInfo, category);","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":7,"lckjosh":3}},{"path":"src/main/java/seedu/nuscents/data/transaction/ExpenseCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public enum ExpenseCategory implements TransactionCategory {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" FOOD, ENTERTAINMENT, TRANSPORTATION, UTILITY, RENT, OTHERS, NO_EXPENSE_CATEGORY","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":5}},{"path":"src/main/java/seedu/nuscents/data/transaction/Transaction.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"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":" protected TransactionCategory category;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":" public Transaction(String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" count++;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"choonkit-nus"},"content":" public Transaction(float amount, Date date, String description) {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" count++;","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":"spaceman03"},"content":" public Transaction(float amount, Date date, String description, String additionalInfo,","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" TransactionCategory category) {","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" this.additionalInfo \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" count++;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"choonkit-nus"},"content":" public float getAmount() {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" return amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" public Date getDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" return date;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" public String getFormattedDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" return formatter.format(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" return description;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" public String getAdditionalInfo() {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" return additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" public TransactionCategory getCategory() {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" return getAmount() + \" | \" + getFormattedDate() + \" | \" + getDescription() + \" | \" + getAdditionalInfo()","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" + \" | \" + getCategory();","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" public static int getTransactionCount() {","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" return count;","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" * Decrease the task count by one when a task is deleted.","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" public static void decreaseTransactionCountByOne() {","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" count--;","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":48,"lckjosh":29,"choonkit-nus":3}},{"path":"src/main/java/seedu/nuscents/data/transaction/TransactionCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public interface TransactionCategory {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"spaceman03":4}},{"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":"vvhuiling"},"content":"import seedu.nuscents.commands.FilterCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.AllowanceCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_DELETE;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_FIND;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_VIEW;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_FILTER;","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_UNKNOWN_EXPENSE_CATEGORY;","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_UNKNOWN_ALLOWANCE_CATEGORY;","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_DATE;","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_AMOUNT;","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX_ARGUMENTS;","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_FATAL_ERROR;","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_KEYWORD;","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"public class Parser {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"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":49,"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":50,"author":{"gitId":"lckjosh"},"content":" private static final String AMT_PATTERN \u003d \"/amt ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" private static final String DATE_PATTERN \u003d \"/date ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" private static final String DESC_PATTERN \u003d \"/desc ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" private static final String NOTE_PATTERN \u003d \"/note ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" private static final String CATEGORY_PATTERN \u003d \"/cat ([^/]+)\";","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" public static \u003cTransactionList\u003e Command parseCommand(String text, TransactionList transactions)","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" String[] commandTypeAndArgs \u003d text.split(\" \", 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" String commandType \u003d commandTypeAndArgs[0];","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" String arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" if (commandTypeAndArgs.length \u003e 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" arguments \u003d commandTypeAndArgs[1];","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" arguments \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"spaceman03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"aaronxujiachen"},"content":" case COMMAND_EXIT:","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" case COMMAND_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" case COMMAND_ALLOWANCE:","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseAllowance(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" case COMMAND_EXPENSE:","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseExpense(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" case COMMAND_DELETE:","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" return new DeleteCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" case COMMAND_FIND:","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" return new FindCommand(parseFind(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"vvhuiling"},"content":" case COMMAND_VIEW:","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"vvhuiling"},"content":" return new ViewCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"vvhuiling"},"content":" case COMMAND_FILTER:","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"vvhuiling"},"content":" return new FilterCommand(parseCategory(arguments));","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"spaceman03"},"content":" case COMMAND_HELP:","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"aaronxujiachen"},"content":" if (arguments !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"aaronxujiachen"},"content":" throw new NuscentsException(\"OOPS!!! The correct format is \u0027help\u0027 alone.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" } catch (NuscentsException | ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" throw e;","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":" private static String datePatternValidation(String date) throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" if (date.matches(DATE_PATTERN1)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spaceman03"},"content":" return \"d-M-yyyy\";","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" } else if (date.matches(DATE_PATTERN2)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" return \"yyyy-M-d\";","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","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":" public static Date parseDate(String date, String format, SimpleDateFormat formatter)","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"spaceman03"},"content":" String separator;","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" if (format.contains(\"-\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"-\";","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"/\";","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" String[] dateMonthYear \u003d date.split(separator);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" if (Integer.parseInt(dateMonthYear[1]) \u003e 12) {","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" return formatter.parse(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an allowance.","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Allowance} object","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the allowance is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":" public static Allowance parseAllowance(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"choonkit-nus"},"content":" float amount \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"choonkit-nus"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":135,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(extractValue(\"allowance\", arguments, AMT_PATTERN, false));","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"choonkit-nus"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"choonkit-nus"},"content":" throw new NuscentsException(MESSAGE_INVALID_AMOUNT);","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"choonkit-nus"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"allowance\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"allowance\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"allowance\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"spaceman03"},"content":" String category \u003d extractValue(\"allowance\", arguments, CATEGORY_PATTERN, true);","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"spaceman03"},"content":" AllowanceCategory allowanceCategory \u003d parseAllowanceCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"lckjosh"},"content":" assert formattedDate !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":148,"author":{"gitId":"lckjosh"},"content":" assert description !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":149,"author":{"gitId":"lckjosh"},"content":" assert additionalInformation !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":150,"author":{"gitId":"lckjosh"},"content":" assert category !\u003d null;","lastModifiedDate":"2023-10-29"},{"lineNumber":151,"author":{"gitId":"spaceman03"},"content":" return new Allowance(amount, formattedDate, description, additionalInformation, allowanceCategory);","lastModifiedDate":"2023-10-23"},{"lineNumber":152,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":153,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":154,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":155,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an expense.","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Expense} object","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the expense is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"spaceman03"},"content":" public static Expense parseExpense(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"lckjosh"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":166,"author":{"gitId":"choonkit-nus"},"content":" float amount \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"choonkit-nus"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(extractValue(\"expense\", arguments, AMT_PATTERN, false));","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"choonkit-nus"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"choonkit-nus"},"content":" throw new NuscentsException(MESSAGE_INVALID_AMOUNT);","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"choonkit-nus"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"expense\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"expense\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"expense\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"spaceman03"},"content":" String category \u003d extractValue(\"expense\", arguments, CATEGORY_PATTERN, true);","lastModifiedDate":"2023-10-23"},{"lineNumber":176,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory expenseCategory \u003d parseExpenseCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":177,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":178,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":179,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":180,"author":{"gitId":"spaceman03"},"content":" return new Expense(amount, formattedDate, description, additionalInformation, expenseCategory);","lastModifiedDate":"2023-10-23"},{"lineNumber":181,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":182,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":183,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":184,"author":{"gitId":"spaceman03"},"content":" public static ExpenseCategory parseExpenseCategory(String expenseCategory) throws NuscentsException {","lastModifiedDate":"2023-10-23"},{"lineNumber":185,"author":{"gitId":"spaceman03"},"content":" String expenseCategoryLowercase \u003d expenseCategory.toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":186,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory category \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":187,"author":{"gitId":"spaceman03"},"content":" switch (expenseCategoryLowercase) {","lastModifiedDate":"2023-10-23"},{"lineNumber":188,"author":{"gitId":"spaceman03"},"content":" case \"food\":","lastModifiedDate":"2023-10-23"},{"lineNumber":189,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.FOOD;","lastModifiedDate":"2023-10-23"},{"lineNumber":190,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":191,"author":{"gitId":"spaceman03"},"content":" case \"entertainment\":","lastModifiedDate":"2023-10-23"},{"lineNumber":192,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.ENTERTAINMENT;","lastModifiedDate":"2023-10-23"},{"lineNumber":193,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":194,"author":{"gitId":"spaceman03"},"content":" case \"transportation\":","lastModifiedDate":"2023-10-23"},{"lineNumber":195,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.TRANSPORTATION;","lastModifiedDate":"2023-10-23"},{"lineNumber":196,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":197,"author":{"gitId":"spaceman03"},"content":" case \"utility\":","lastModifiedDate":"2023-10-23"},{"lineNumber":198,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.UTILITY;","lastModifiedDate":"2023-10-23"},{"lineNumber":199,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":200,"author":{"gitId":"spaceman03"},"content":" case \"rent\":","lastModifiedDate":"2023-10-23"},{"lineNumber":201,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.RENT;","lastModifiedDate":"2023-10-23"},{"lineNumber":202,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":203,"author":{"gitId":"spaceman03"},"content":" case \"others\":","lastModifiedDate":"2023-10-23"},{"lineNumber":204,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.OTHERS;","lastModifiedDate":"2023-10-23"},{"lineNumber":205,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":206,"author":{"gitId":"spaceman03"},"content":" case \"\":","lastModifiedDate":"2023-10-23"},{"lineNumber":207,"author":{"gitId":"lckjosh"},"content":" // fallthrough","lastModifiedDate":"2023-10-29"},{"lineNumber":208,"author":{"gitId":"spaceman03"},"content":" case \"no_expense_category\":","lastModifiedDate":"2023-10-23"},{"lineNumber":209,"author":{"gitId":"spaceman03"},"content":" category \u003d ExpenseCategory.NO_EXPENSE_CATEGORY;","lastModifiedDate":"2023-10-23"},{"lineNumber":210,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":211,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":212,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN_EXPENSE_CATEGORY);","lastModifiedDate":"2023-10-29"},{"lineNumber":213,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":214,"author":{"gitId":"spaceman03"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":215,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":216,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":217,"author":{"gitId":"spaceman03"},"content":" public static AllowanceCategory parseAllowanceCategory(String allowanceCategory) throws NuscentsException {","lastModifiedDate":"2023-10-23"},{"lineNumber":218,"author":{"gitId":"spaceman03"},"content":" String allowanceCategoryLowerCase \u003d allowanceCategory.toLowerCase();","lastModifiedDate":"2023-10-23"},{"lineNumber":219,"author":{"gitId":"spaceman03"},"content":" AllowanceCategory category \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":220,"author":{"gitId":"spaceman03"},"content":" switch (allowanceCategoryLowerCase) {","lastModifiedDate":"2023-10-23"},{"lineNumber":221,"author":{"gitId":"lckjosh"},"content":" case \"salary\":","lastModifiedDate":"2023-10-29"},{"lineNumber":222,"author":{"gitId":"lckjosh"},"content":" category \u003d AllowanceCategory.SALARY;","lastModifiedDate":"2023-10-29"},{"lineNumber":223,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-29"},{"lineNumber":224,"author":{"gitId":"lckjosh"},"content":" case \"allowance\":","lastModifiedDate":"2023-10-29"},{"lineNumber":225,"author":{"gitId":"lckjosh"},"content":" category \u003d AllowanceCategory.ALLOWANCE;","lastModifiedDate":"2023-10-29"},{"lineNumber":226,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-29"},{"lineNumber":227,"author":{"gitId":"lckjosh"},"content":" case \"investments\":","lastModifiedDate":"2023-10-29"},{"lineNumber":228,"author":{"gitId":"lckjosh"},"content":" category \u003d AllowanceCategory.INVESTMENTS;","lastModifiedDate":"2023-10-29"},{"lineNumber":229,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-29"},{"lineNumber":230,"author":{"gitId":"lckjosh"},"content":" case \"gifts\":","lastModifiedDate":"2023-10-29"},{"lineNumber":231,"author":{"gitId":"lckjosh"},"content":" category \u003d AllowanceCategory.GIFTS;","lastModifiedDate":"2023-10-29"},{"lineNumber":232,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-29"},{"lineNumber":233,"author":{"gitId":"lckjosh"},"content":" case \"others\":","lastModifiedDate":"2023-10-29"},{"lineNumber":234,"author":{"gitId":"lckjosh"},"content":" category \u003d AllowanceCategory.OTHERS;","lastModifiedDate":"2023-10-29"},{"lineNumber":235,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":236,"author":{"gitId":"spaceman03"},"content":" case \"\":","lastModifiedDate":"2023-10-23"},{"lineNumber":237,"author":{"gitId":"lckjosh"},"content":" // fallthrough","lastModifiedDate":"2023-10-29"},{"lineNumber":238,"author":{"gitId":"spaceman03"},"content":" case \"no_allowance_category\":","lastModifiedDate":"2023-10-23"},{"lineNumber":239,"author":{"gitId":"spaceman03"},"content":" category \u003d AllowanceCategory.NO_ALLOWANCE_CATEGORY;","lastModifiedDate":"2023-10-23"},{"lineNumber":240,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":241,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":242,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN_ALLOWANCE_CATEGORY);","lastModifiedDate":"2023-10-29"},{"lineNumber":243,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":244,"author":{"gitId":"spaceman03"},"content":" return category;","lastModifiedDate":"2023-10-23"},{"lineNumber":245,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":246,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":247,"author":{"gitId":"vvhuiling"},"content":" public static TransactionCategory parseCategory(String transactionCategory) throws NuscentsException {","lastModifiedDate":"2023-10-28"},{"lineNumber":248,"author":{"gitId":"vvhuiling"},"content":" String allowanceCategoryLowerCase \u003d transactionCategory.toLowerCase();","lastModifiedDate":"2023-10-28"},{"lineNumber":249,"author":{"gitId":"vvhuiling"},"content":" TransactionCategory category \u003d null;","lastModifiedDate":"2023-10-28"},{"lineNumber":250,"author":{"gitId":"vvhuiling"},"content":" switch (allowanceCategoryLowerCase) {","lastModifiedDate":"2023-10-28"},{"lineNumber":251,"author":{"gitId":"vvhuiling"},"content":" case \"work\":","lastModifiedDate":"2023-10-28"},{"lineNumber":252,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":253,"author":{"gitId":"vvhuiling"},"content":" case \"food\":","lastModifiedDate":"2023-10-28"},{"lineNumber":254,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.FOOD;","lastModifiedDate":"2023-10-28"},{"lineNumber":255,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":256,"author":{"gitId":"vvhuiling"},"content":" case \"entertainment\":","lastModifiedDate":"2023-10-28"},{"lineNumber":257,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.ENTERTAINMENT;","lastModifiedDate":"2023-10-28"},{"lineNumber":258,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":259,"author":{"gitId":"vvhuiling"},"content":" case \"transportation\":","lastModifiedDate":"2023-10-28"},{"lineNumber":260,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.TRANSPORTATION;","lastModifiedDate":"2023-10-28"},{"lineNumber":261,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":262,"author":{"gitId":"vvhuiling"},"content":" case \"utility\":","lastModifiedDate":"2023-10-28"},{"lineNumber":263,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.UTILITY;","lastModifiedDate":"2023-10-28"},{"lineNumber":264,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":265,"author":{"gitId":"vvhuiling"},"content":" case \"rent\":","lastModifiedDate":"2023-10-28"},{"lineNumber":266,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.RENT;","lastModifiedDate":"2023-10-28"},{"lineNumber":267,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":268,"author":{"gitId":"vvhuiling"},"content":" case \"others\":","lastModifiedDate":"2023-10-28"},{"lineNumber":269,"author":{"gitId":"vvhuiling"},"content":" category \u003d ExpenseCategory.OTHERS;","lastModifiedDate":"2023-10-28"},{"lineNumber":270,"author":{"gitId":"vvhuiling"},"content":" break;","lastModifiedDate":"2023-10-28"},{"lineNumber":271,"author":{"gitId":"vvhuiling"},"content":" default:","lastModifiedDate":"2023-10-28"},{"lineNumber":272,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN_EXPENSE_CATEGORY);","lastModifiedDate":"2023-10-29"},{"lineNumber":273,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":274,"author":{"gitId":"vvhuiling"},"content":" return category;","lastModifiedDate":"2023-10-28"},{"lineNumber":275,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":276,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":277,"author":{"gitId":"spaceman03"},"content":" public static int parseTaskIndex(String arguments) throws IndexOutOfBoundsException,","lastModifiedDate":"2023-10-16"},{"lineNumber":278,"author":{"gitId":"spaceman03"},"content":" NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":279,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":280,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":281,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":282,"author":{"gitId":"vvhuiling"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":283,"author":{"gitId":"spaceman03"},"content":" int taskIndex \u003d Integer.parseInt(arguments);","lastModifiedDate":"2023-10-16"},{"lineNumber":284,"author":{"gitId":"lckjosh"},"content":" if (taskIndex \u003e Transaction.getTransactionCount() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":285,"author":{"gitId":"spaceman03"},"content":" throw new IndexOutOfBoundsException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":286,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":287,"author":{"gitId":"spaceman03"},"content":" return taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":288,"author":{"gitId":"vvhuiling"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":289,"author":{"gitId":"vvhuiling"},"content":" throw new NuscentsException(MESSAGE_INVALID_INDEX_ARGUMENTS);","lastModifiedDate":"2023-10-18"},{"lineNumber":290,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":291,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":292,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":293,"author":{"gitId":"spaceman03"},"content":" public static String parseFind(String arguments) throws NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":294,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":295,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_KEYWORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":296,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":297,"author":{"gitId":"spaceman03"},"content":" return arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":298,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":299,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":300,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":301,"author":{"gitId":"lckjosh"},"content":" private static String extractValue(String command, String input, String pattern, boolean isOptional)","lastModifiedDate":"2023-10-17"},{"lineNumber":302,"author":{"gitId":"lckjosh"},"content":" throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":303,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Pattern p \u003d java.util.regex.Pattern.compile(pattern);","lastModifiedDate":"2023-10-17"},{"lineNumber":304,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Matcher m \u003d p.matcher(input);","lastModifiedDate":"2023-10-17"},{"lineNumber":305,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":306,"author":{"gitId":"lckjosh"},"content":" if (m.find()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":307,"author":{"gitId":"lckjosh"},"content":" return m.group(1).trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":308,"author":{"gitId":"lckjosh"},"content":" } else if (!isOptional) {","lastModifiedDate":"2023-10-17"},{"lineNumber":309,"author":{"gitId":"lckjosh"},"content":" switch (command) {","lastModifiedDate":"2023-10-17"},{"lineNumber":310,"author":{"gitId":"lckjosh"},"content":" case \"allowance\":","lastModifiedDate":"2023-10-17"},{"lineNumber":311,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":312,"author":{"gitId":"lckjosh"},"content":" case \"expense\":","lastModifiedDate":"2023-10-17"},{"lineNumber":313,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":314,"author":{"gitId":"lckjosh"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":315,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_FATAL_ERROR);","lastModifiedDate":"2023-10-17"},{"lineNumber":316,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":317,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":318,"author":{"gitId":"lckjosh"},"content":" return \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":319,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":320,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":171,"lckjosh":89,"vvhuiling":43,"choonkit-nus":12}},{"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":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.AllowanceCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.parser.Parser.parseAllowanceCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.parser.Parser.parseExpenseCategory;","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"public class Storage {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" private static final Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" private String filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" FileHandler fileHandler \u003d new FileHandler(\"storage.log\");","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" logger.addHandler(fileHandler);","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" logger.setUseParentHandlers(false);","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" logger.log(Level.SEVERE, \"Logging to file not working.\", e);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" public String getPath() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" return filePath;","lastModifiedDate":"2023-10-18"},{"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":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" * Reads data from the storage file and return it.","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" * @return an arraylist of tasks","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" public ArrayList\u003cTransaction\u003e readDataFromFile() throws FileNotFoundException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to read data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" transactionDecoder(file, transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" } catch (ParseException | NuscentsException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Something went wrong when reading data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"All data successfully loaded\");","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"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":" * Decodes the storage data file and store it into the arraylist of tasks.","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" * @param file storage data file","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" * @param transactions arraylist of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage data file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" private static void transactionDecoder(File file, ArrayList\u003cTransaction\u003e transactions)","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" throws FileNotFoundException, ParseException, NuscentsException {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" Scanner data \u003d new Scanner(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" while (data.hasNext()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"lckjosh"},"content":" String transactionDetails \u003d data.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":" char transactionType \u003d transactionDetails.charAt(0);","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":" String[] columns;","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"choonkit-nus"},"content":" float amount;","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spaceman03"},"content":" Date date;","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"lckjosh"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"lckjosh"},"content":" String note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" String category\u003d \"\";","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":" switch (transactionType) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"lckjosh"},"content":" case \u0027A\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(columns[1]);","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"lckjosh"},"content":" note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" AllowanceCategory allowanceCategory \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" if (columns.length \u003e 5) {","lastModifiedDate":"2023-10-23"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" category \u003d columns[5];","lastModifiedDate":"2023-10-23"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" allowanceCategory \u003d parseAllowanceCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" transactions.add(new Allowance(amount, date, description, note, allowanceCategory));","lastModifiedDate":"2023-10-23"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"lckjosh"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(columns[1]);","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory expenseCategory \u003d null;","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"spaceman03"},"content":" if (columns.length \u003e 5) {","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"spaceman03"},"content":" category \u003d columns[5];","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" expenseCategory \u003d parseExpenseCategory(category);","lastModifiedDate":"2023-10-23"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":" transactions.add(new Expense(amount, date, description, note, expenseCategory));","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"spaceman03"},"content":" break;","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":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"spaceman03"},"content":" * Writes the data to the storage file.","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"spaceman03"},"content":" * Creates a new file if the file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"lckjosh"},"content":" * @param transactionList list of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spaceman03"},"content":" * @throws IOException If there were errors converting and/or storing the data to the file.","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"lckjosh"},"content":" public void writeToFile(TransactionList transactionList) throws IOException {","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"spaceman03"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to write data to file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Converting info to storage format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"spaceman03"},"content":" String output \u003d toStorageFormat(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"spaceman03"},"content":" fw.write(output);","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"spaceman03"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Transaction data successfully stored\");","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"spaceman03"},"content":" fw.close();","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"spaceman03"},"content":" private static String toStorageFormat(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"lckjosh"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"spaceman03"},"content":" return \"A\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"lckjosh"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"spaceman03"},"content":" return \"E\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":160,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Invalid transaction format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"spaceman03"},"content":" return null;","lastModifiedDate":"2023-10-16"},{"lineNumber":162,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":163,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":164,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":165,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":116,"lckjosh":46,"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-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" + \"--------------\";","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" public static final String LOGO \u003d \" __ __ __ __ ____ _____ _____ __ __ ________ ____\\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":"spaceman03"},"content":" + \"|__|\\\\___|________|______/ \\\\_____|_____|__|\\\\___| |__| |_____/\\n\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"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":13,"author":{"gitId":"aaronxujiachen"},"content":" public static final String HELP_MENU \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"aaronxujiachen"},"content":" \"- `list` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"aaronxujiachen"},"content":" \" Show a list of all entries.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"aaronxujiachen"},"content":" \"- `allowance /amt AMOUNT /date DATE /desc DESCRIPTION /cat CATEGORY \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an allowance.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"aaronxujiachen"},"content":" \"- `expense /amt AMOUNT /date DATE /desc DESCRIPTION /cat CATEGORY \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an expense.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"aaronxujiachen"},"content":" \"- `delete ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"aaronxujiachen"},"content":" \" Delete an entry.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"aaronxujiachen"},"content":" \"- `view ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"aaronxujiachen"},"content":" \" View an entry detail.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"aaronxujiachen"},"content":" \"- `exit` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"aaronxujiachen"},"content":" \" Exit the program.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"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":30,"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":31,"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":32,"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":33,"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":34,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"OOPS!!! This is an invalid transaction index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"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":36,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_LIST \u003d \"You have not made any transactions!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"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":38,"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":39,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_FATAL_ERROR \u003d \"OOPS!!! Fatal error occurred...\";","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"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":41,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_UNKNOWN_EXPENSE_CATEGORY \u003d \"OOPS!!! The category you provided is not a \"","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" + \"valid category.\\n\"","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" + \"Valid categories are FOOD/ENTERTAINMENT/TRANSPORTATION/UTILITY/RENT/OTHERS.\";","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_UNKNOWN_ALLOWANCE_CATEGORY \u003d \"OOPS!!! The category you provided is not a \"","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" + \"valid category.\\n\"","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" + \"Valid categories are SALARY/ALLOWANCE/INVESTMENTS/GIFTS/OTHERS.\";","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":17,"spaceman03":17,"lckjosh":10,"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":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.transaction.AllowanceCategory;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.transaction.TransactionCategory;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LOGO;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"public class Ui {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":" private final Scanner input;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":" public Ui() {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" public static void showLine() {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"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":" public static void showWelcomeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Hello from\\n\" + LOGO);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"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":39,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" public static void showGoodbyeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(MESSAGE_EXIT);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","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":" public void showException(Exception e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionCount( ) {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Now you have \" + Transaction.getTransactionCount() + \" transactions in the list.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionAddedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Got it. I\u0027ve added this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionRemovedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Noted. I\u0027ve removed this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionList(TransactionList transactionList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"choonkit-nus"},"content":" float netBalance \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" if (transactionList.getTransactions().isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" System.out.println(MESSAGE_EMPTY_LIST);","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"spaceman03"},"content":" assert transactionList.getTransactions() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the transactions in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-10s %-5s %n\",","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":" \"S/N\", \"TYPE\", \"AMOUNT\", \"DATE\", \"DESCRIPTION\", \"NOTE\", \"CATEGORY\");","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" int index \u003d transactions.indexOf(transaction) + 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" String additionalInfo \u003d transaction.getAdditionalInfo();","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" String note;","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" if (additionalInfo.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" note \u003d \"-\";","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spaceman03"},"content":" note \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"lckjosh"},"content":" TransactionCategory allowanceCategory \u003d transaction.getCategory();","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"lckjosh"},"content":" String category;","lastModifiedDate":"2023-10-29"},{"lineNumber":101,"author":{"gitId":"lckjosh"},"content":" if (allowanceCategory \u003d\u003d AllowanceCategory.NO_ALLOWANCE_CATEGORY) {","lastModifiedDate":"2023-10-29"},{"lineNumber":102,"author":{"gitId":"lckjosh"},"content":" category \u003d \"-\";","lastModifiedDate":"2023-10-29"},{"lineNumber":103,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":104,"author":{"gitId":"lckjosh"},"content":" category \u003d allowanceCategory.toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":105,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":106,"author":{"gitId":"lckjosh"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-10s %-5s %n\", index, \"Allowance\",","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"choonkit-nus"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"lckjosh"},"content":" transaction.getDescription(), note, category);","lastModifiedDate":"2023-10-29"},{"lineNumber":109,"author":{"gitId":"choonkit-nus"},"content":" netBalance +\u003d transaction.getAmount();","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" TransactionCategory expenseCategory \u003d transaction.getCategory();","lastModifiedDate":"2023-10-23"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" String category;","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"spaceman03"},"content":" if (expenseCategory \u003d\u003d ExpenseCategory.NO_EXPENSE_CATEGORY) {","lastModifiedDate":"2023-10-23"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" category \u003d \"-\";","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" category \u003d expenseCategory.toString();","lastModifiedDate":"2023-10-23"},{"lineNumber":117,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":118,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-10s %-5s %n\", index, \"Expense\",","lastModifiedDate":"2023-10-23"},{"lineNumber":119,"author":{"gitId":"choonkit-nus"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" transaction.getDescription(), note, category);","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"choonkit-nus"},"content":" netBalance -\u003d transaction.getAmount();","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"choonkit-nus"},"content":" System.out.println(\"Net Balance \u003d \" + String.format(\"%.2f\", netBalance));","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"choonkit-nus"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":" public static void showReadDataError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"No previous data found /:\");","lastModifiedDate":"2023-10-16"},{"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":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"vvhuiling"},"content":" public static void showTransactionViewMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Following are details of the transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"vvhuiling"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: ALLOWANCE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"vvhuiling"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: EXPENSE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DATE: \" + transaction.getFormattedDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"AMOUNT: \" + transaction.getAmount());","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DESCRIPTION: \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"NOTE: \" + transaction.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"vvhuiling"},"content":" public static void showFilterMessage(ArrayList\u003cTransaction\u003e filteredTransactions, TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Filtered transactions in the category \" + category.toString() + \":\");","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"vvhuiling"},"content":" float netBalance \u003d 0;","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"vvhuiling"},"content":" for (Transaction transaction : filteredTransactions) {","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"vvhuiling"},"content":" int index \u003d filteredTransactions.indexOf(transaction) + 1;","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"vvhuiling"},"content":" String additionalInfo \u003d transaction.getAdditionalInfo();","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"vvhuiling"},"content":" String note;","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"vvhuiling"},"content":" if (additionalInfo.isEmpty()) {","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"vvhuiling"},"content":" note \u003d \"-\";","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"vvhuiling"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"vvhuiling"},"content":" note \u003d additionalInfo;","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"vvhuiling"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Allowance\",","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"vvhuiling"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"vvhuiling"},"content":" transaction.getDescription(), note);","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"vvhuiling"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"vvhuiling"},"content":" netBalance +\u003d transaction.getAmount();","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"vvhuiling"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"vvhuiling"},"content":" netBalance -\u003d transaction.getAmount();","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":173,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Net Balance \u003d \" + String.format(\"%.2f\", netBalance));","lastModifiedDate":"2023-10-28"},{"lineNumber":174,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":175,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":176,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":177,"author":{"gitId":"vvhuiling"},"content":" public static void showFilterNotFoundMessage(TransactionCategory category) {","lastModifiedDate":"2023-10-28"},{"lineNumber":178,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":179,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"No transactions found in the category \" + category.toString());","lastModifiedDate":"2023-10-28"},{"lineNumber":180,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-28"},{"lineNumber":181,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":182,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":183,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":184,"author":{"gitId":"spaceman03"},"content":" public static void showHelpMenu() {","lastModifiedDate":"2023-10-16"},{"lineNumber":185,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":186,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(Messages.HELP_MENU);","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":188,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":189,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":190,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":100,"lckjosh":29,"choonkit-nus":7,"vvhuiling":49}},{"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":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Transaction;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Allowance;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"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,"spaceman03":3,"lckjosh":65,"choonkit-nus":8,"vvhuiling":35}},{"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.transaction.Expense;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.transaction.ExpenseCategory;","lastModifiedDate":"2023-10-23"},{"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 Expense(50, formattedDate, \"Lunch\", \"Pasta\",","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" ExpenseCategory.FOOD));","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" return transactions;","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spaceman03":62}}] diff --git a/AY2324S1-CS2113-T18-4_tp_master/commits.json b/AY2324S1-CS2113-T18-4_tp_master/commits.json index 5e735b9..56f3290 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":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"66ec99db977bb62c580e524ccba441d0a9b1a6bc","isMergeCommit":false,"messageTitle":"Update Help Menu and Expected Output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"10f1243a4105af2f119f174f5b1a1750fb46ca7c","isMergeCommit":true,"messageTitle":"Merge pull request #46 from aaronxujiachen/branch-helpCommand","messageBody":"Update Help Menu and Expected Output","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"7de34ee77059ca924107844a387f1270ccbc04a6","isMergeCommit":false,"messageTitle":"Update Developer Guide with HelpCommand Description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":0}}},{"hash":"fdf7fedff16f1975c81383094b4bfcdbe41de273","isMergeCommit":true,"messageTitle":"Merge pull request #53 from aaronxujiachen/branch-helpCommand","messageBody":"Update Developer Guide with HelpCommand Description","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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"abf7e0d383220862a29252891109986c6a18047a","isMergeCommit":false,"messageTitle":"Add enum for expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0},"other":{"insertions":0,"deletions":0}}},{"hash":"c7eb1e6cf5cdee9df3e7b4f9b396d60076ea534f","isMergeCommit":false,"messageTitle":"Add enum for allowance categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":9}}},{"hash":"d83ef516eb453895f47baa6f018732334ae31b62","isMergeCommit":false,"messageTitle":"Add enum for expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3}}},{"hash":"d01598b037bc2d6ea81342b3645fa2523b089d57","isMergeCommit":false,"messageTitle":"Parse in user input for expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":103,"deletions":22},"test-code":{"insertions":7,"deletions":8}}},{"hash":"adbc9ab88e8f1be5b219c11d9bb491984b6fe6dd","isMergeCommit":false,"messageTitle":"Remove unused code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"ac156217a18d0041fb306ddc01b08236e90f908a","isMergeCommit":false,"messageTitle":"Add unknown category message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":8}}},{"hash":"890ece2b155415093eb71d34ab36fa68c6b86d84","isMergeCommit":false,"messageTitle":"Display expense category","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":7}}},{"hash":"ba2d8955958a559d5b5e1aaba5e11b1a0f4ec156","isMergeCommit":false,"messageTitle":"Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":4,"deletions":0}}}]},{"date":"2023-10-24","commitResults":[{"hash":"163be2d0da1297d32078d9853932f29056f5aa5d","isMergeCommit":false,"messageTitle":"Update developer guide with add transaction implementation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":95,"deletions":2}}},{"hash":"e167b41b1b2fa098bf06f6ea21d423d6e3a0c425","isMergeCommit":false,"messageTitle":"Remove typo in messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"e0453762b1f1541622dbcece541805672bdb3e80","isMergeCommit":true,"messageTitle":"Merge pull request #45 from spaceman03/categorise-expense","messageBody":"Categorise expense","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"2ab9510bcca09bb340a58bdbf90f85f8a48acf0b","isMergeCommit":false,"messageTitle":"Update add transaction sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e09280fbe2cc6cecf3319e69c4b5a3702c22fec8","isMergeCommit":true,"messageTitle":"Merge pull request #48 from spaceman03/categorise-expense","messageBody":"Update add transaction sequence diagram","fileTypesAndContributionMap":{}},{"hash":"673637e784ad81ec65f79bb9f132ce956eb9331f","isMergeCommit":true,"messageTitle":"Merge pull request #49 from spaceman03/categorise-expense","messageBody":"Rename add transaction sequence diagram","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":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"e314cf72af2a1b98ea6f2a152066cf580c2869b7","isMergeCommit":false,"messageTitle":"Log to file instead of console","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"0e965221f371cc06be78781b85da225771a035df","isMergeCommit":true,"messageTitle":"Merge pull request #47 from lckjosh/log-to-file","messageBody":"Log to file instead of console","fileTypesAndContributionMap":{}},{"hash":"d1a3c2c1d4f2c22fced940d763cdf9451bf92ca4","isMergeCommit":false,"messageTitle":"Add sequence diagram and DG section for list transactions feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":60,"deletions":0}}},{"hash":"8b9c4e3ac6dd80e2d89c2deeb6a60eb69f2499c8","isMergeCommit":true,"messageTitle":"Merge pull request #50 from lckjosh/documentation-list-transactions","messageBody":"Add sequence diagram and DG section for list transactions feature","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":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"df70ddafe61839e54f7106526dc5ff723965d14d","isMergeCommit":false,"messageTitle":"Update DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":14}}},{"hash":"97833f368c21040a46673b81e60ec7cee02488a3","isMergeCommit":true,"messageTitle":"Merge pull request #52 from choonkit-nus/developer-guide-netbalance","messageBody":"Update DeveloperGuide","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":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"6451018435889679e89ef5a5c351fbf3bcf22062","isMergeCommit":false,"messageTitle":"Add sequence diagram and DG section for view transactions feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":93,"deletions":0}}},{"hash":"20f6f5e5ba1964ca30025c219981f384ed9c9e3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Developer-Guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d24db106d6ea0786077a110f6a3735003da68da9","isMergeCommit":true,"messageTitle":"Merge pull request #51 from vvhuiling/Developer-Guide","messageBody":"Add sequence diagram and DG section for view transactions feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d5310bf5f2db280b6a3269c34bd342ce76142b53","isMergeCommit":false,"messageTitle":"Add the ability to filter transactions by a specific category","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":114,"deletions":0}}},{"hash":"aeb5d79ba81547848b0c49d92e8f4c50b1132d74","isMergeCommit":false,"messageTitle":"Update help feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"5646c066e32c37e3dacb4883ed04284f7a323001","isMergeCommit":false,"messageTitle":"Bug fix: remove updated line in help messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"3a74111ad5780aff61593815bf573dbd88869102","isMergeCommit":true,"messageTitle":"Merge pull request #55 from vvhuiling/filter-feature","messageBody":"Filter feature","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"aaronxujiachen":{"docs":34,"functional-code":28,"test-code":22},"spaceman03":{"docs":94,"functional-code":676,"test-code":67,"other":6},"lckjosh":{"docs":61,"functional-code":245,"test-code":65},"choonkit-nus":{"docs":13,"functional-code":27,"test-code":8},"vvhuiling":{"docs":93,"functional-code":161,"test-code":35}},"authorContributionVariance":{"aaronxujiachen":121.01825,"spaceman03":21980.586,"lckjosh":20076.246,"choonkit-nus":128.0745,"vvhuiling":667.7225},"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":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"66ec99db977bb62c580e524ccba441d0a9b1a6bc","isMergeCommit":false,"messageTitle":"Update Help Menu and Expected Output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"10f1243a4105af2f119f174f5b1a1750fb46ca7c","isMergeCommit":true,"messageTitle":"Merge pull request #46 from aaronxujiachen/branch-helpCommand","messageBody":"Update Help Menu and Expected Output","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"7de34ee77059ca924107844a387f1270ccbc04a6","isMergeCommit":false,"messageTitle":"Update Developer Guide with HelpCommand Description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":0}}},{"hash":"fdf7fedff16f1975c81383094b4bfcdbe41de273","isMergeCommit":true,"messageTitle":"Merge pull request #53 from aaronxujiachen/branch-helpCommand","messageBody":"Update Developer Guide with HelpCommand Description","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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"abf7e0d383220862a29252891109986c6a18047a","isMergeCommit":false,"messageTitle":"Add enum for expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0},"other":{"insertions":0,"deletions":0}}},{"hash":"c7eb1e6cf5cdee9df3e7b4f9b396d60076ea534f","isMergeCommit":false,"messageTitle":"Add enum for allowance categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":9}}},{"hash":"d83ef516eb453895f47baa6f018732334ae31b62","isMergeCommit":false,"messageTitle":"Add enum for expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3}}},{"hash":"d01598b037bc2d6ea81342b3645fa2523b089d57","isMergeCommit":false,"messageTitle":"Parse in user input for expense categories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":103,"deletions":22},"test-code":{"insertions":7,"deletions":8}}},{"hash":"adbc9ab88e8f1be5b219c11d9bb491984b6fe6dd","isMergeCommit":false,"messageTitle":"Remove unused code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"ac156217a18d0041fb306ddc01b08236e90f908a","isMergeCommit":false,"messageTitle":"Add unknown category message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":8}}},{"hash":"890ece2b155415093eb71d34ab36fa68c6b86d84","isMergeCommit":false,"messageTitle":"Display expense category","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":7}}},{"hash":"ba2d8955958a559d5b5e1aaba5e11b1a0f4ec156","isMergeCommit":false,"messageTitle":"Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":4,"deletions":0}}}]},{"date":"2023-10-24","commitResults":[{"hash":"163be2d0da1297d32078d9853932f29056f5aa5d","isMergeCommit":false,"messageTitle":"Update developer guide with add transaction implementation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":95,"deletions":2}}},{"hash":"e167b41b1b2fa098bf06f6ea21d423d6e3a0c425","isMergeCommit":false,"messageTitle":"Remove typo in messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"e0453762b1f1541622dbcece541805672bdb3e80","isMergeCommit":true,"messageTitle":"Merge pull request #45 from spaceman03/categorise-expense","messageBody":"Categorise expense","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"2ab9510bcca09bb340a58bdbf90f85f8a48acf0b","isMergeCommit":false,"messageTitle":"Update add transaction sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e09280fbe2cc6cecf3319e69c4b5a3702c22fec8","isMergeCommit":true,"messageTitle":"Merge pull request #48 from spaceman03/categorise-expense","messageBody":"Update add transaction sequence diagram","fileTypesAndContributionMap":{}},{"hash":"673637e784ad81ec65f79bb9f132ce956eb9331f","isMergeCommit":true,"messageTitle":"Merge pull request #49 from spaceman03/categorise-expense","messageBody":"Rename add transaction sequence diagram","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":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"e314cf72af2a1b98ea6f2a152066cf580c2869b7","isMergeCommit":false,"messageTitle":"Log to file instead of console","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"0e965221f371cc06be78781b85da225771a035df","isMergeCommit":true,"messageTitle":"Merge pull request #47 from lckjosh/log-to-file","messageBody":"Log to file instead of console","fileTypesAndContributionMap":{}},{"hash":"d1a3c2c1d4f2c22fced940d763cdf9451bf92ca4","isMergeCommit":false,"messageTitle":"Add sequence diagram and DG section for list transactions feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":60,"deletions":0}}},{"hash":"8b9c4e3ac6dd80e2d89c2deeb6a60eb69f2499c8","isMergeCommit":true,"messageTitle":"Merge pull request #50 from lckjosh/documentation-list-transactions","messageBody":"Add sequence diagram and DG section for list transactions feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"2f6a79041cdcc74741429ba317d9994ea8636461","isMergeCommit":false,"messageTitle":"Add ability to categorise allowances","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":15}}},{"hash":"8a8b556a5c8ec44fc04f568aa8634986e62dd16a","isMergeCommit":false,"messageTitle":"Add assertions for parseAllowance","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"ab35c0ce1534804d6be0c5460311908caf20f17f","isMergeCommit":false,"messageTitle":"Fix coding style violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":5}}},{"hash":"e7f34924d4ec8f2650bafc826c70969db1dd8c4f","isMergeCommit":true,"messageTitle":"Merge pull request #56 from lckjosh/categorise-allowance","messageBody":"Categorise allowance","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":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"df70ddafe61839e54f7106526dc5ff723965d14d","isMergeCommit":false,"messageTitle":"Update DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":14}}},{"hash":"97833f368c21040a46673b81e60ec7cee02488a3","isMergeCommit":true,"messageTitle":"Merge pull request #52 from choonkit-nus/developer-guide-netbalance","messageBody":"Update DeveloperGuide","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":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"6451018435889679e89ef5a5c351fbf3bcf22062","isMergeCommit":false,"messageTitle":"Add sequence diagram and DG section for view transactions feature","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":93,"deletions":0}}},{"hash":"20f6f5e5ba1964ca30025c219981f384ed9c9e3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Developer-Guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d24db106d6ea0786077a110f6a3735003da68da9","isMergeCommit":true,"messageTitle":"Merge pull request #51 from vvhuiling/Developer-Guide","messageBody":"Add sequence diagram and DG section for view transactions feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d5310bf5f2db280b6a3269c34bd342ce76142b53","isMergeCommit":false,"messageTitle":"Add the ability to filter transactions by a specific category","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":114,"deletions":0}}},{"hash":"aeb5d79ba81547848b0c49d92e8f4c50b1132d74","isMergeCommit":false,"messageTitle":"Update help feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"5646c066e32c37e3dacb4883ed04284f7a323001","isMergeCommit":false,"messageTitle":"Bug fix: remove updated line in help messages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"3a74111ad5780aff61593815bf573dbd88869102","isMergeCommit":true,"messageTitle":"Merge pull request #55 from vvhuiling/filter-feature","messageBody":"Filter feature","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"aaronxujiachen":{"docs":34,"functional-code":28,"test-code":22},"spaceman03":{"docs":94,"functional-code":662,"test-code":67,"other":6},"lckjosh":{"docs":61,"functional-code":293,"test-code":65},"choonkit-nus":{"docs":13,"functional-code":26,"test-code":8},"vvhuiling":{"docs":93,"functional-code":160,"test-code":35}},"authorContributionVariance":{"aaronxujiachen":118.205696,"spaceman03":21447.762,"lckjosh":19603.484,"choonkit-nus":124.92244,"vvhuiling":651.91486},"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 93735bb..da1efe0 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":"spinoandraptos"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" mainClass.set(\"Quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" archiveBaseName.set(\"quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"spinoandraptos":3,"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":"lisizhuang-0121"},"content":"## Table of Contents","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"* [Acknowledgements](#acknowledgements)","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"* [Design and Implementation](#design--implementation)","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":" * [Application Lifecycle](#application-lifecycle)","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"StevenGX12"},"content":" * [Parser Component](#parser-component)","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":" * [Command Component](#command-components)","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":" * [Storage Component](#storage-component)","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":" * [UI Component](#ui-component)","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"* [Product Scope](#product-scope)","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"* [Non Functional Requirements](#non-functional-requirements)","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"* [Glossary](#glossary)","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"* [Instructions for Manual Testing](#instructions-for-manual-testing)","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":"1. For the main structure of the program, we have adapted the project structure","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"from the Individual Project of Man Juncheng at [Link](https://github.com/spinoandraptos/ip/tree/master) \u003c/li\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"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":21,"author":{"gitId":"lisizhuang-0121"},"content":"codes at [Link](https://github.com/se-edu/addressbook-level2)\u003c/li\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":"3. For the developer\u0027s guide, we have referenced the developer\u0027s guide from AddressBook","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":"level-3 [Link](https://se-education.org/addressbook-level3/DeveloperGuide.html)","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":"# Design \u0026 implementation","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"## Overall Architecture","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":"The main execution of the QuizHub application will concern 4 components which","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":"are the QuizHub, Ui, Parser and Command packages.","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":"![](./UML/architecture.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":"`Quizhub` is the \"main\" class, which is responsible for starting the program,","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"James-Hong-Jey"},"content":"initialising all other objects, executing commands, and shutting down.","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":"`UI` is the component that interacts with the user, taking inputs and displaying","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":"the results of the executed commands.","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"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":40,"author":{"gitId":"James-Hong-Jey"},"content":"it has, based on the user input.","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":"`Commands` refer to a package of individual commands with complex and specific","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":"logic, which is later executed in Quizhub and displayed by `UI`.","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"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":46,"author":{"gitId":"James-Hong-Jey"},"content":"refer to any miscellaneous utility classes used by all the components.","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":"## Application Lifecycle","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":"![](./UML/lifecycle.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"The program begins with the `run()` call to `QuizHub` class.","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":"This starts a loop in which","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":"user input is continuously read in from CLI for the user command to be extracted and executed.","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":"In each iteration of the loop, `QuizHub` makes a call to `Ui.getUserInput()` and returns the","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":"entire user input as a String object. Following which, `QuizHub` makes a call to","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":"`Parser.parseCommand()` to extract the user command from the String object and returns a","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":"`Command` object. Finally, `QuizHub` makes a call to `Command.executeCommand()` and performs","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":"the requested task.","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":"If `Command` is of Exit type, the loop will exit, and the program terminates.","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":"## Parser Component","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":"The `Parser` component is the backbone behind the program, functioning as the API","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":"between the CLI user interface and the core functionalities of the program. It supports","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":"the direct communication between the program and user by converting user input into `Command`","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":"objects which can be interpreted by the program.","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":"### Design Considerations","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":"As the `Parser` functions as the API between user and program, it must be designed with a clear","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":"consideration of both human and machine requirements.","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":"Our target users are NUS students preparing for exams who wish to use our program to facilitate","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":"their practice. Considering that time is of the essence for revising students, the `Parser` must","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":"prioritise efficiency of use to not cause time delays to users\u0027 revision. With this in mind,","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":"we based our design off the following points for inputs taken in by the `Parser`.","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":"1. **Ease of use**: Simple and short command structure \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":"2. **Ease of familiarisation**: No excessive or complicated commands","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":"Consideration must also be given to the developers and machine executing the code. The exact","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":"mechanism behind the `Parser` must be able to effectively extract the relevant information from","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":"user inputs in a non-arbitrary way to be used by other classes. Hence, we also need to strike a balance with the","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":"following point for inputs taken in by the `Parser`.","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":"1. **Ease of processing and validation**: Hierarchical command structure","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":"### Alternative Design Considerations","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":"In designing the `Parser`, an alternative design we considered is to follow that of `Unix`","lastModifiedDate":"2023-10-24"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":"command interface. The `Unix` parser is designed such that input commands are required to","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":"have the syntax of ```command -(options) argument1 argument2 ...``` where the order of arguments","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":"does not matter. While this is a clean and neat parser design, we have decided not to adopt this","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":"design as we see a strong need of having a hierarchical command structure for our program.","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":"1. A hierarchical structure introduces logical sequence and flow to the command used,","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" facilitating a quick familiarisation process for users to quickly learn the command syntax.","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" This is in line with our design consideration to minimise learning and familiarisation time","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" for users. This is in addition to the ease of processing and validation of commands.","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" ```short [question]/[answer]/[module]/[difficulty]```, for one, is a command that has a","lastModifiedDate":"2023-10-24"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" logical sequence to which the details of a question is entered. It is more intuitive to","lastModifiedDate":"2023-10-24"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" follow a structure instead of entering such details without a fixed order, which can easily","lastModifiedDate":"2023-10-24"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" lead to confusion. \u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":"2. The use of the delimiter `/` also better helps to introduce the concept of hierarchy than the","lastModifiedDate":"2023-10-24"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" delimiter `--` used in `Unix` commands as `/` can be more easily associated with layering and","lastModifiedDate":"2023-10-24"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" stacking, which create structures possessing hierarchy.","lastModifiedDate":"2023-10-24"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":"### Parser Command Syntax","lastModifiedDate":"2023-10-24"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":"Our final design seeks to optimise both user experience and program effectiveness.","lastModifiedDate":"2023-10-24"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":"We have hence chosen the following general syntax for commands to be input into the `Parser`.","lastModifiedDate":"2023-10-24"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":"All commands require a starting payload, but some commands do not require the subsequent arguments.","lastModifiedDate":"2023-10-24"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":"commandType [payload] [/argument1 [payload1] /argument2 [payload2] ... ]","lastModifiedDate":"2023-10-24"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":"The command structure is simple, short, and intuitive. With commands rarely requiring more","lastModifiedDate":"2023-10-24"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":"than 2 arguments, typing and inputting the command in CLI is fast and efficient, allowing","lastModifiedDate":"2023-10-24"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":"revising students to quickly utilise the program. The hierarchical and logical structure to","lastModifiedDate":"2023-10-24"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":"the arrangement of arguments and payloads allows students to quickly familiarise with the","lastModifiedDate":"2023-10-24"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":"syntax and minimise delays to their learning schedule.","lastModifiedDate":"2023-10-24"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":"The hierarchical structure also allows for the respective payload to be easily extracted","lastModifiedDate":"2023-10-24"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":"with little ambiguity. Command validation can then be performed sequentially, facilitating","lastModifiedDate":"2023-10-24"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":"efficient checks.","lastModifiedDate":"2023-10-24"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":"### Implementation","lastModifiedDate":"2023-10-24"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":"The main function of `Parser` is to decode user input and extract relevant information to be","lastModifiedDate":"2023-10-24"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":"used by other classes. Hence, it supports 3 main methods as listed below.","lastModifiedDate":"2023-10-24"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":"1. `parseCommand`","lastModifiedDate":"2023-10-24"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":"2. `getContentAfterKeyword`","lastModifiedDate":"2023-10-24"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":"3. `extractQuestionDifficulty`","lastModifiedDate":"2023-10-24"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":"`parseCommand`","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":"This method processes raw user input from CLI to extract information to be assembled into a","lastModifiedDate":"2023-10-24"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":"`Command` object. It determines the type of command by reading the commandType from the","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":"very start of the user input.","lastModifiedDate":"2023-10-24"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":"The following sequence diagram shows the implementation of `parseCommand`.","lastModifiedDate":"2023-10-24"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":"![](./UML/Parser.jpg)","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":"`getContentAfterKeyword`","lastModifiedDate":"2023-10-24"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":"This method acts as a helper method to assist in extracting the payload following an argument","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":"in the user input. It is used in the constructing of `Command` objects when command-specific","lastModifiedDate":"2023-10-24"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":"information need to be extracted from arguments in the user input.","lastModifiedDate":"2023-10-24"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"It simply breaks up an entire ```/argument [payload]``` String into ```/argument``` and","lastModifiedDate":"2023-10-24"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":"```[payload]``` and returns the `[payload]`. Hence, any String passed into this method must","lastModifiedDate":"2023-10-24"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":"take on the form of ```/argument [payload]``` or an exception will be thrown and handled by","lastModifiedDate":"2023-10-24"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":"printing an error message to the CLI.","lastModifiedDate":"2023-10-24"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":"`extractQuestionDifficulty`","lastModifiedDate":"2023-10-24"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":"This method acts as a helper method for extracting an `QnDifficulty` enum type from a user","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":"text input. This is used for setting question difficulty during the construction of a","lastModifiedDate":"2023-10-24"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":"`Question` , or the execution of a `CommandMarkDifficulty`.","lastModifiedDate":"2023-10-24"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":"If the string passed to this method does not describe an existing question difficulty level, an","lastModifiedDate":"2023-10-24"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":"exception will be thrown and handled by printing an error message to the CLI.","lastModifiedDate":"2023-10-24"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":168,"author":{"gitId":"yeo-menghan"},"content":"## Command Components","lastModifiedDate":"2023-10-24"},{"lineNumber":169,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":170,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":171,"author":{"gitId":"yeo-menghan"},"content":"### Start Command - Start Quiz","lastModifiedDate":"2023-10-24"},{"lineNumber":172,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":173,"author":{"gitId":"yeo-menghan"},"content":"The start quiz feature allows users to start quizzing themselves with customizable characters to define which modules to quiz themselves on alongside whether to randomize the questions or use their pre-defined question order.","lastModifiedDate":"2023-10-24"},{"lineNumber":174,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":175,"author":{"gitId":"yeo-menghan"},"content":"![](./UML/CommandStart_Sequence.jpg)","lastModifiedDate":"2023-10-24"},{"lineNumber":176,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":177,"author":{"gitId":"yeo-menghan"},"content":"The start quiz mechanism is facilitated by CommandStart under package quizhub.command. The class utilises methods from `quizhub.questionlist.QuestionList`. It extends Command with 2 new prompts (`/[quiz mode]` and `/[qn mode]`) and 1 user input field (`/[start details]`). It implements the following operations:","lastModifiedDate":"2023-10-24"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":179,"author":{"gitId":"yeo-menghan"},"content":"`/[quiz mode]`","lastModifiedDate":"2023-10-24"},{"lineNumber":180,"author":{"gitId":"yeo-menghan"},"content":"1. 2 configurations - `/module` and `/all`","lastModifiedDate":"2023-10-24"},{"lineNumber":181,"author":{"gitId":"yeo-menghan"},"content":"2.\t`/module` must be followed by a category name to retrieve questions from that specific category","lastModifiedDate":"2023-10-24"},{"lineNumber":182,"author":{"gitId":"yeo-menghan"},"content":"- The method categoriseListByModules from the package `quizhub.questionlist.QuestionList` will be called to retrieve the questions by that are listed within the specified category from the storage list","lastModifiedDate":"2023-10-24"},{"lineNumber":183,"author":{"gitId":"yeo-menghan"},"content":"- `/all` will not require any input from `/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":184,"author":{"gitId":"yeo-menghan"},"content":"3.\tThe method `getAllQns()` from package `quizhub.questionlist.QuestionList` will be called to retrieve all questions from the storage list.","lastModifiedDate":"2023-10-24"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":186,"author":{"gitId":"yeo-menghan"},"content":"`/[qn mode]`","lastModifiedDate":"2023-10-24"},{"lineNumber":187,"author":{"gitId":"yeo-menghan"},"content":"1.\t2 configurations - `/random` and `/normal`","lastModifiedDate":"2023-10-24"},{"lineNumber":188,"author":{"gitId":"yeo-menghan"},"content":"2.\tThis prompt is activated after defining `/[quiz mode]` and `/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":189,"author":{"gitId":"yeo-menghan"},"content":"3.\t/random will randomize the list of questions using `java.util.Collections.shuffle` and store it within a temporary array to prevent tempering with the original array in Storage","lastModifiedDate":"2023-10-24"},{"lineNumber":190,"author":{"gitId":"yeo-menghan"},"content":"4.\t`/normal` will not require any further actions, using the previously generated list as specified by `/[quiz mode]` and `/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"yeo-menghan"},"content":"`/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":193,"author":{"gitId":"yeo-menghan"},"content":"1.\tDefine the category of `/module` i.e. `/module` number to call upon the “number” tagged modules when starting the quiz","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"yeo-menghan"},"content":"2.\tThis field can be left blank when `/all` is called for `/[quiz mode]` to tell the program to quiz the user on all questions stored within the local storage","lastModifiedDate":"2023-10-24"},{"lineNumber":195,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":196,"author":{"gitId":"yeo-menghan"},"content":"Thereafter the quiz is started by calling the method `startQuiz()` in package `quizhub.questionlist.QuestionList`. Within `startQuiz()`, the program iterates through the list of totalQuestions while blocking out the answers. The user can input their answer in the input field which is utilized to match with the actual answer to provide “correct” or “wrong”. Each correct answer will increment correctAnswers variable by 1. The quiz ends when all the questions are displayed and the total number of correctAnswers will be displayed.","lastModifiedDate":"2023-10-24"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":198,"author":{"gitId":"James-Hong-Jey"},"content":"### Short Command - Add Short Answer Question to the Quiz","lastModifiedDate":"2023-10-24"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":200,"author":{"gitId":"James-Hong-Jey"},"content":"One of the supported question formats is the Short Answer Question, in which a question","lastModifiedDate":"2023-10-24"},{"lineNumber":201,"author":{"gitId":"James-Hong-Jey"},"content":"can be answered with a phrase of a few words, which will be matched to a corresponding answer","lastModifiedDate":"2023-10-24"},{"lineNumber":202,"author":{"gitId":"James-Hong-Jey"},"content":"of sufficient similarity.","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":204,"author":{"gitId":"James-Hong-Jey"},"content":"It is parsed as: `short [question]/[answer]/[module]/[difficulty]`","lastModifiedDate":"2023-10-24"},{"lineNumber":205,"author":{"gitId":"James-Hong-Jey"},"content":"1. `[question]` is the question, phrased as asking the user (i.e. What is 2 + 2? )","lastModifiedDate":"2023-10-24"},{"lineNumber":206,"author":{"gitId":"James-Hong-Jey"},"content":"2. `[answer]` is the answer or possible answer(s) that the user must","lastModifiedDate":"2023-10-24"},{"lineNumber":207,"author":{"gitId":"James-Hong-Jey"},"content":" input to count as correct. It is case-insensitive. (i.e. 4, four)","lastModifiedDate":"2023-10-24"},{"lineNumber":208,"author":{"gitId":"James-Hong-Jey"},"content":"3. `[module]` is the module that the question belongs in (i.e. CS2113)","lastModifiedDate":"2023-10-24"},{"lineNumber":209,"author":{"gitId":"James-Hong-Jey"},"content":"4. `[difficulty]` is the difficulty of the question for sorting later (i.e. Hard)","lastModifiedDate":"2023-10-24"},{"lineNumber":210,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":211,"author":{"gitId":"James-Hong-Jey"},"content":"*Condensed Class Diagram - Does not contain all attributes \u0026 methods","lastModifiedDate":"2023-10-25"},{"lineNumber":212,"author":{"gitId":"James-Hong-Jey"},"content":"![](./UML/AddShortCommand.jpg)","lastModifiedDate":"2023-10-25"},{"lineNumber":213,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":214,"author":{"gitId":"James-Hong-Jey"},"content":"Thereafter, the command is returned to the Quizhub component and executed,","lastModifiedDate":"2023-10-24"},{"lineNumber":215,"author":{"gitId":"James-Hong-Jey"},"content":"to add a Question object to the corresponding QuestionList object","lastModifiedDate":"2023-10-24"},{"lineNumber":216,"author":{"gitId":"James-Hong-Jey"},"content":"using the `addToQuestionList` method. This method will analyse the arguments above","lastModifiedDate":"2023-10-24"},{"lineNumber":217,"author":{"gitId":"James-Hong-Jey"},"content":"and add the Question to the appropriate list.","lastModifiedDate":"2023-10-24"},{"lineNumber":218,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":219,"author":{"gitId":"James-Hong-Jey"},"content":"### Find Command - Look for a matching question","lastModifiedDate":"2023-10-24"},{"lineNumber":220,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":221,"author":{"gitId":"James-Hong-Jey"},"content":"Quizhub supports searching for specific questions, by searching matching keywords","lastModifiedDate":"2023-10-24"},{"lineNumber":222,"author":{"gitId":"James-Hong-Jey"},"content":"in the format","lastModifiedDate":"2023-10-24"},{"lineNumber":223,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":224,"author":{"gitId":"James-Hong-Jey"},"content":"`find /[description]` OR `find /[module]`","lastModifiedDate":"2023-10-24"},{"lineNumber":225,"author":{"gitId":"James-Hong-Jey"},"content":"i.e. `find /CS2113`, `find /water buffalo`","lastModifiedDate":"2023-10-24"},{"lineNumber":226,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":227,"author":{"gitId":"James-Hong-Jey"},"content":"This command is passed to the corresponding QuestionList where the `searchList` method","lastModifiedDate":"2023-10-24"},{"lineNumber":228,"author":{"gitId":"James-Hong-Jey"},"content":"is called, which will create a new ArrayList of questions that contain the (case-insensitive)","lastModifiedDate":"2023-10-24"},{"lineNumber":229,"author":{"gitId":"James-Hong-Jey"},"content":"keyword and subsequently print them.","lastModifiedDate":"2023-10-24"},{"lineNumber":230,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":231,"author":{"gitId":"StevenGX12"},"content":"## Storage Component","lastModifiedDate":"2023-10-24"},{"lineNumber":232,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":233,"author":{"gitId":"StevenGX12"},"content":"The Storage class is a critical component of the QuizHub application, responsible for managing the storage, retrieval, and updating of question data. It represents a hard disk storage system for storing, reading, and updating question data. It interacts with question data in a file specified by the user and integrates with the `QuestionList` class for effective storage and retrieval of questions.","lastModifiedDate":"2023-10-24"},{"lineNumber":234,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":235,"author":{"gitId":"StevenGX12"},"content":"Developers need to be aware of the two main methods for loading and updating data:","lastModifiedDate":"2023-10-24"},{"lineNumber":236,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":237,"author":{"gitId":"StevenGX12"},"content":"- `public void loadData(QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":238,"author":{"gitId":"StevenGX12"},"content":"- `public void updateData(QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":239,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":240,"author":{"gitId":"StevenGX12"},"content":"The details of the data loading and updating process are explained in details below.","lastModifiedDate":"2023-10-24"},{"lineNumber":241,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":242,"author":{"gitId":"StevenGX12"},"content":"### Constructor","lastModifiedDate":"2023-10-24"},{"lineNumber":243,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":244,"author":{"gitId":"StevenGX12"},"content":"#### `public Storage(String filePath)`","lastModifiedDate":"2023-10-24"},{"lineNumber":245,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":246,"author":{"gitId":"StevenGX12"},"content":"- **Parameters:**","lastModifiedDate":"2023-10-24"},{"lineNumber":247,"author":{"gitId":"StevenGX12"},"content":" - `filePath`: The path to the file where question data is stored and read from.","lastModifiedDate":"2023-10-24"},{"lineNumber":248,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":249,"author":{"gitId":"StevenGX12"},"content":"### Loading data","lastModifiedDate":"2023-10-24"},{"lineNumber":250,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":251,"author":{"gitId":"StevenGX12"},"content":"The process of loading data from the storage file specified in the constructor takes places in a few steps. To illustrate the overall flow on loading data, refer to the sequence diagram below.","lastModifiedDate":"2023-10-24"},{"lineNumber":252,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":253,"author":{"gitId":"StevenGX12"},"content":"![](./UML/Storage.jpg)","lastModifiedDate":"2023-10-24"},{"lineNumber":254,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":255,"author":{"gitId":"StevenGX12"},"content":":exclamation: This sequence diagram emphasizes the process of loading data into storage, and has therefore omitted details of more trivial and/or non-related methods as well as exception handling logic. To find out more about the details, please refer to the complete code and header comments.","lastModifiedDate":"2023-10-24"},{"lineNumber":256,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":257,"author":{"gitId":"StevenGX12"},"content":"In addition to the main `loadData` method, the process involves the following 3 helper methods:","lastModifiedDate":"2023-10-24"},{"lineNumber":258,"author":{"gitId":"StevenGX12"},"content":"- `private void addQuestionFromFile(QuestionList questions, String currentQuestion, int questionIndex, String questionType, String questionDescription, String questionDoneStatus, String questionDifficulty, String questionModule)`","lastModifiedDate":"2023-10-24"},{"lineNumber":259,"author":{"gitId":"StevenGX12"},"content":"- `private void parseQuestionsFromStrings(ArrayList\u003cString\u003e rawQuestions, QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":260,"author":{"gitId":"StevenGX12"},"content":"- `public void buildCurrentListFromFile(QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":261,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":262,"author":{"gitId":"StevenGX12"},"content":"The general idea is that when the program is first initiated, the `loadData` method is called from within the `Ui` class, which passes in an empty `QuestionList`. Within the method itself, the helper method `buildCurrentListFromFile()` will take in this empty `QuestionList` object and populate it with `question` objects according to textual information stored within the specified file. This is done by first extracting each question stored line by line into a new `Arraylist\u003cString\u003e rawQuestions`, then calling another helper method `parseQuestionsFromStrings()` to add each question into the `QuestionList` via a third helper method `addQuestionFromFileaddQuestionFromFile`.","lastModifiedDate":"2023-10-24"},{"lineNumber":263,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":264,"author":{"gitId":"spinoandraptos"},"content":"The process is refactored into these methods to avoid deep nesting of code to achieve clearer logical flow and more readability and easier debugging process.","lastModifiedDate":"2023-10-28"},{"lineNumber":265,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":266,"author":{"gitId":"StevenGX12"},"content":"### Updating data","lastModifiedDate":"2023-10-24"},{"lineNumber":267,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":268,"author":{"gitId":"StevenGX12"},"content":"The process of updating data is done in a similar fashion compared to that of loading data, but in the reverse order logically.","lastModifiedDate":"2023-10-24"},{"lineNumber":269,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":270,"author":{"gitId":"StevenGX12"},"content":"Apart from the main `updateData` method, it involves the use of 2 other helper methods:","lastModifiedDate":"2023-10-24"},{"lineNumber":271,"author":{"gitId":"StevenGX12"},"content":"- `private void writeToFile(String filePath, String textToAdd, boolean toAppend)`","lastModifiedDate":"2023-10-24"},{"lineNumber":272,"author":{"gitId":"StevenGX12"},"content":"- `private void storeQuestionToFile(Question question)`","lastModifiedDate":"2023-10-24"},{"lineNumber":273,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":274,"author":{"gitId":"StevenGX12"},"content":"Upon exiting the program, the `Ui` class will call the `updateData` method and passing in the current `QuestionList` of the program. Within the method, the `writeToFile` helper method is first called to determine whether texts are to replace existing content of the file or to be appended at the back. Then, each question is stored in the appropriate format into the destination file using the method `storeQuestionToFile` which parses a `Question` object into the correct string format for storage.","lastModifiedDate":"2023-10-24"},{"lineNumber":275,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":276,"author":{"gitId":"StevenGX12"},"content":"## UI Component","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"StevenGX12"},"content":"The UI class in the Quizhub application is responsible for handling the user interface interactions in a command-line interface (CLI). It provides methods for displaying messages or questions as well as getting user","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"StevenGX12"},"content":"input.","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":281,"author":{"gitId":"StevenGX12"},"content":"### Constructor","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"StevenGX12"},"content":"#### `public Ui(Storage dataStorage, QuestionList tasks)`","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"StevenGX12"},"content":"- **Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"StevenGX12"},"content":" - `dataStorage`: An instance of the `Storage` class, which handles the storage of quiz data on the hard disk.","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"StevenGX12"},"content":" - `tasks`: An instance of the `QuestionList` class, which represents a record of all questions documented in the application.","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"StevenGX12"},"content":"### Implementation Details","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"StevenGX12"},"content":"#### Overall Flow","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"StevenGX12"},"content":"![](./UML/ui_flow.jpg)","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"StevenGX12"},"content":"When the program is first initiated, the `displayOpeningMessage()` method is called to display a welcome message while also calling the `loadData()` method of the `dataStorage` to display all the questions stored in the storage file if any.","lastModifiedDate":"2023-10-26"},{"lineNumber":296,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"spinoandraptos"},"content":"Afterward, in the main loop of the program execution, the `getUserInput()` method is called at the start of the loop to capture user input as a `String` object, which is then used by the `Parser` and various `Command` classes to parse and execute the appropriate commands. This process is terminated only upon execution of a `CommandExit`.","lastModifiedDate":"2023-10-28"},{"lineNumber":298,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":299,"author":{"gitId":"StevenGX12"},"content":"Finally, the `displayClosingMessage()` method is called to display a farewell message while also calling the `updateData()` method of the `dataStorage` to update the data stored in the storage file with the latest ones.","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"StevenGX12"},"content":"#### Displaying Quizzes","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"StevenGX12"},"content":"![](./UML/ui_quiz.jpg)","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"StevenGX12"},"content":"The `Ui` class also has a `displayQuestion(Question question, int currentQuestionIndex, int totalQuestions)` method, which is used to render a question from the list of stored questions in the specific format and prompt the user for an answer when a `CommandStart` is executed to signal the start of a quiz. This method will be called in a loop for each question until the end of the list of questions.","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"spinoandraptos"},"content":"# Product scope","lastModifiedDate":"2023-10-24"},{"lineNumber":308,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":309,"author":{"gitId":"spinoandraptos"},"content":"## Our Product","lastModifiedDate":"2023-10-24"},{"lineNumber":310,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub","lastModifiedDate":"2023-10-21"},{"lineNumber":311,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":312,"author":{"gitId":"spinoandraptos"},"content":"## Target user profile","lastModifiedDate":"2023-10-24"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":314,"author":{"gitId":"lisizhuang-0121"},"content":"Our target users are","lastModifiedDate":"2023-10-21"},{"lineNumber":315,"author":{"gitId":"lisizhuang-0121"},"content":"* NUS Students preparing for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":316,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to take notes in class","lastModifiedDate":"2023-10-21"},{"lineNumber":317,"author":{"gitId":"lisizhuang-0121"},"content":"* Fear to miss out of important knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":318,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to test their understanding of knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":319,"author":{"gitId":"lisizhuang-0121"},"content":"* Want to be better prepared for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":320,"author":{"gitId":"lisizhuang-0121"},"content":"* Majoring in computing or engineering where there are lots of exams","lastModifiedDate":"2023-10-21"},{"lineNumber":321,"author":{"gitId":"lisizhuang-0121"},"content":"* Coders and tech geeks who enjoy using the CLI interface","lastModifiedDate":"2023-10-21"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":323,"author":{"gitId":"spinoandraptos"},"content":"## Value proposition","lastModifiedDate":"2023-10-24"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":325,"author":{"gitId":"lisizhuang-0121"},"content":"Allow NUS Students to easily take notes in class and allow them to","lastModifiedDate":"2023-10-21"},{"lineNumber":326,"author":{"gitId":"lisizhuang-0121"},"content":"generate quizzes to test their knowledge of understanding. By using the","lastModifiedDate":"2023-10-21"},{"lineNumber":327,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub application, students can input notes taken in class in a question form,","lastModifiedDate":"2023-10-21"},{"lineNumber":328,"author":{"gitId":"lisizhuang-0121"},"content":"which they could use to take quizzes to ensure their understanding of the topic.","lastModifiedDate":"2023-10-21"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":330,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":332,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":333,"author":{"gitId":"lisizhuang-0121"},"content":"|:-------:|:-------------------------------------:|:---------------------------------------------------------------------------------:|:-------------------------------------------------------------------------:|","lastModifiedDate":"2023-10-21"},{"lineNumber":334,"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":335,"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":336,"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":337,"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":338,"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":339,"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":340,"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":341,"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":342,"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":343,"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":344,"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":345,"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":346,"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":347,"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":348,"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":349,"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":350,"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":351,"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":352,"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":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":354,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":355,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":356,"author":{"gitId":"spinoandraptos"},"content":"1. Program should work on any typical OS as long as it has Java 11 installed and configured.","lastModifiedDate":"2023-10-28"},{"lineNumber":357,"author":{"gitId":"spinoandraptos"},"content":"2. A user with average or above typing speed for regular English text (not program code) in the CLI should not ","lastModifiedDate":"2023-10-29"},{"lineNumber":358,"author":{"gitId":"spinoandraptos"},"content":"experience any significant delays to their revision as compared to using a GUI program.","lastModifiedDate":"2023-10-29"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":360,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":362,"author":{"gitId":"spinoandraptos"},"content":"1. **Typical OS**: Windows, Linux, Unix, macOS.","lastModifiedDate":"2023-10-28"},{"lineNumber":363,"author":{"gitId":"spinoandraptos"},"content":"2. **CommandType**: The first word input in the CLI, indicates the type of instruction the program should execute.","lastModifiedDate":"2023-10-28"},{"lineNumber":364,"author":{"gitId":"spinoandraptos"},"content":"`e.g. start, delete, short`","lastModifiedDate":"2023-10-28"},{"lineNumber":365,"author":{"gitId":"spinoandraptos"},"content":"3. **Argument**: A parameter word identified by a leading `/`, arguments indicate the start of information","lastModifiedDate":"2023-10-28"},{"lineNumber":366,"author":{"gitId":"spinoandraptos"},"content":"to be extracted from a command in addition to the command type.","lastModifiedDate":"2023-10-28"},{"lineNumber":367,"author":{"gitId":"spinoandraptos"},"content":"4. **Payload**: A sequence of additional information immediately following the command type or arguments, they","lastModifiedDate":"2023-10-28"},{"lineNumber":368,"author":{"gitId":"spinoandraptos"},"content":"provide information for executing complex instructions.","lastModifiedDate":"2023-10-28"},{"lineNumber":369,"author":{"gitId":"spinoandraptos"},"content":"5. **Hierarchical**: Possesses logical sequencing or order, such as in order of decreasing subsets or importance.","lastModifiedDate":"2023-10-28"},{"lineNumber":370,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":371,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":373,"author":{"gitId":"spinoandraptos"},"content":"### Launch","lastModifiedDate":"2023-10-28"},{"lineNumber":374,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":375,"author":{"gitId":"spinoandraptos"},"content":"1. Ensure you have Java 11 or above installed in your Computer.","lastModifiedDate":"2023-10-28"},{"lineNumber":376,"author":{"gitId":"spinoandraptos"},"content":"2. Download the latest `tp_version_1.0.jar` from [here](https://github.com/AY2324S1-CS2113-W12-1/tp/releases/download/Version_1_0/tp_version_1.0.jar).","lastModifiedDate":"2023-10-28"},{"lineNumber":377,"author":{"gitId":"spinoandraptos"},"content":"3. Copy the file to the folder you want to use as the home folder for your QuizHub.","lastModifiedDate":"2023-10-28"},{"lineNumber":378,"author":{"gitId":"spinoandraptos"},"content":"4. Open a command terminal, cd into the folder you put the `tp_version_1.0.jar` file in, and use the java -jar ","lastModifiedDate":"2023-10-28"},{"lineNumber":379,"author":{"gitId":"spinoandraptos"},"content":"`tp_version_1.0.jar` command to run the application and launch the CLI.","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"spinoandraptos":144,"StevenGX12":78,"James-Hong-Jey":49,"yeo-menghan":25,"lisizhuang-0121":52,"-":31}},{"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":"yeo-menghan"},"content":"QuizHUB is a local desktop app designed to help NUS students easily record examinable questions and generate quizzes","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"from their very own question bank to test their understanding via a Command Line Interface (CLI). Easily launch-able","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"on the go, QuizHUB is a versatile tool that aims to streamline and optimize the revision experience for NUS students","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":"from all fields of study.","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"2. Down the latest version of `QuizHub` from [here](http://link.to/duke).","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":"1. Helper command","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"yeo-menghan"},"content":"2. Add question/answer and group them in modules/difficulty","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"yeo-menghan"},"content":"3. Stores the question/answer in local storage","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":"4. Delete question/answer","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":"5. Find question/answer via question\u0027s description or via module name","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":"6. Edit question/answer","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":"7. Mark question difficulty","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":"8. Start a quiz session, specifying category of questions and in random/normal mode","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":"9. Permanently shuffle questions order for added challenge!","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"### Getting help on using the app: `help`","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":"Assists new users in familiarising with the application. Provides a list of commands for the user to get started","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":"with the essentials.","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"yeo-menghan"},"content":"Format: `help`","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"yeo-menghan"},"content":"* **Command**:`help` \u003cbr\u003e","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":"`Here are the list of commands you can use:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":"`1. help - shows the list of commands you can use,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":"`2. short [question]/[answer]/[module]/[difficulty] - adds a short answer question and its answer to the list,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":"`3. list - shows the list of questions and answers,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":"`4. delete [question number] - deletes the question and answer at the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":"`5. find /[description] - displays all questions that contains the specified description,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":"`6. find /[module] - displays all questions that belong to the specified module,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":"`7. edit [question number] /description [description] - edits the description of the question with the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":"`8. edit [question number] /answer [answer] - edits the answer to the question with the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":"`9. start /[quiz mode] [start details] /[qn mode] - starts the quiz with option for /module or /all and /random or /normal,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":"`10. shuffle - shuffle quiz questions to a random order,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":"`11. markdiff [question number] [question difficulty] - sets the difficulty of question with the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":"`12. bye - exits the program` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":"Notes:","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":"* Ver 2.0 will only list commands. Future versions will include auto-filling and scrolling","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"yeo-menghan"},"content":" (multiple pages of the help menu)","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":"### Adding short-answer questions and their answers: `short`","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":"Adds a new short question and its answer to the question and answer bank along with the assigned module and","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":"difficulty level.","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":"Format: `short [question]/[answer]/[module]/[difficulty]`","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"yeo-menghan"},"content":"Example of usage:","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `add What is the value of Pi to 2 decimal places?/3.14/math/math` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" `I have added the following question OwO:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" `[S] What is the value of Pi to 2 decimal places? / 3.14 | math | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `add What fish is Nemo based off?/a Clownfish/trivia/easy` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" `I have added the following question OwO:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" `[S][] What fish is Nemo based off? / a Clownfish | trivia | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e ","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":"Notes:","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"yeo-menghan"},"content":"* If either the question or answer is left blank, the app will prompt you to re-enter the question-answer set,","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"yeo-menghan"},"content":" the app does not support blank questions/answers","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":"### List Questions `list`","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":"List all the questions from the question and answer bank in the storage.","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":"Format: `list`","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":"Examples of usage:","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `list` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"yeo-menghan"},"content":" **Output**:\u003cbr\u003e","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" 1: `[S][] 2 / 4 | num | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" 2: `[S][] hi / hihi | word | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" 3: `[S][] 6 / 12 | num | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"yeo-menghan"},"content":"### Delete Questions `delete`","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":"Deletes the question with the specified question number from the question and answer bank.","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":"`delete [qustion number]`","lastModifiedDate":"2023-10-29"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":"* **Command**: `delete 2` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" `Roger that! I have deleted the following question \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" `[s][] [question description] / [ansewer] | [module] | [quesiton difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":"Notes:","lastModifiedDate":"2023-10-29"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":"* The program only supports deleting one question at a time, so entering multiple question numbers will result in the program prompting you to enter only 1 question number.","lastModifiedDate":"2023-10-29"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":"* The program accepts only a valid integer question number within the range of the number of available questions, any other form of inputs will result in the program prompting you to re-enter a valid command.","lastModifiedDate":"2023-10-29"},{"lineNumber":104,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"yeo-menghan"},"content":"### Find question/answer `find`","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":"Finds and displays all questions in the question and answer bank that match the criteria (question description / answer) and keywords of the search.","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":"1. `find /description [question description]`","lastModifiedDate":"2023-10-29"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":"2. `find /answer [answer]`","lastModifiedDate":"2023-10-29"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":"Examples of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":"* **Command**: `find /description example description` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":" `Here are questions that matched your search:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":" `1: [S][] EXAMPLE Description / [answer] | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":117,"author":{"gitId":"StevenGX12"},"content":" `2: [S][] example description1 / [answer] | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" `3: [S][] example description 2/ [answer] | [module] | [question difficulty]` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":"* **Command**: `find /answer example answer` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":" `Here are questions that matched your search:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" `1: [S][] [question description] / EXAMPLE Answer | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" `2: [S][] [question description] / example answer1 | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" `3: [S][] [question description] / example answer 2 | [module] | [question difficulty]` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":"Notes:","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":"* As long as the search keyword string is a substring of the question description / answer of a question stored in the question and answer bank, it will be included in the search result. Please refer to the above examples as an illustration of this property.","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":"* The search is non case-sensitive. Please refer to the above examples as an illustration of this property.","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":"### Edit question/answer `edit`","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":"Edits the description or answer of an existing question in the question and answer bank","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":"by referencing the number of the question in the existing question list in the question","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":"and answer bank.","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":"Format:","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":"1. `edit [question number] /description [newDescription]`","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":"2. `edit [question number] /answer [newAnswer]`","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":"Examples of usage:","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `edit 1 /description change description!!!` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have edited the following question \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" `[S][] change description!!! / [original answer] | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `edit 2 /answer different answer???` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have edited the following question \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" `[S][] [original description] / different answer??? | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":"Notes:","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":"* If either the question number is invalid, or no new description or answer is provided,","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" the app will prompt you to re-enter the edit command","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"* The app only supports changing either description or answer at a time, not both together","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"yeo-menghan"},"content":"### Start quiz `start`","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"yeo-menghan"},"content":"Starts a quiz which fetches the specified category from the question bank in normal / random order to be tested.","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":"The app will display the fetched questions one at a time on CLI and the user is required to enter answer through CLI.","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":"Upon every user answer entry, the app feedbacks if the user answered correctly, loads the next question and updates","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":"the score. When all questions are answered, the quiz terminates automatically and the final user quiz score is displayed.","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":162,"author":{"gitId":"yeo-menghan"},"content":"Format: `start /[quiz mode] [start details] /[qn mode]`","lastModifiedDate":"2023-10-27"},{"lineNumber":163,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"yeo-menghan"},"content":"Examples of usage:","lastModifiedDate":"2023-10-27"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /module num /normal` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions that pertains to module “num” in order defined in the list","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /module num /random` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions that pertains to module “num” but in a randomised order","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /all /random` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions directly from the list of questions in random order","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /all /normal` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions directly from the list of questions in the order of the list","lastModifiedDate":"2023-10-28"},{"lineNumber":173,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":174,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":175,"author":{"gitId":"yeo-menghan"},"content":"Notes:","lastModifiedDate":"2023-10-27"},{"lineNumber":176,"author":{"gitId":"yeo-menghan"},"content":"* If the specified module is not part of the list, an exception will be thrown and the user will be notified","lastModifiedDate":"2023-10-27"},{"lineNumber":177,"author":{"gitId":"yeo-menghan"},"content":" with a prompt to write the command in the specified format.","lastModifiedDate":"2023-10-27"},{"lineNumber":178,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"yeo-menghan"},"content":"### Shuffling Questions `shuffle`","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"yeo-menghan"},"content":"Shuffle questions within question list to a random order,","lastModifiedDate":"2023-10-27"},{"lineNumber":181,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":182,"author":{"gitId":"yeo-menghan"},"content":"Format: `shuffle`","lastModifiedDate":"2023-10-27"},{"lineNumber":183,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":184,"author":{"gitId":"yeo-menghan"},"content":"Notes","lastModifiedDate":"2023-10-27"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":"* Shuffle will not work if there are no questions within the question bank","lastModifiedDate":"2023-10-28"},{"lineNumber":186,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":187,"author":{"gitId":"yeo-menghan"},"content":"### Mark difficulty of questions `markdiff`","lastModifiedDate":"2023-10-27"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":"Changes the difficulty level of an existing question in the question and answer bank","lastModifiedDate":"2023-10-28"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":"by referencing the number of the question in the existing question list in the question","lastModifiedDate":"2023-10-28"},{"lineNumber":190,"author":{"gitId":"spinoandraptos"},"content":"and answer bank.","lastModifiedDate":"2023-10-28"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":192,"author":{"gitId":"spinoandraptos"},"content":"Format: `markdiff [question number] [question difficulty]`","lastModifiedDate":"2023-10-28"},{"lineNumber":193,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":194,"author":{"gitId":"spinoandraptos"},"content":"Examples of usage:","lastModifiedDate":"2023-10-28"},{"lineNumber":195,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `markdiff 1 easy` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":196,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":197,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have marked the following question as easy \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":198,"author":{"gitId":"spinoandraptos"},"content":" `[S][] [original description] / [original answer] | [module] | EASY` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":199,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `markdiff 2 Hard` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":200,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":201,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have marked the following question as hard \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":202,"author":{"gitId":"spinoandraptos"},"content":" `[S][] [original description] / [original answer] | [module] | HARD` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":203,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":204,"author":{"gitId":"spinoandraptos"},"content":"Notes:","lastModifiedDate":"2023-10-28"},{"lineNumber":205,"author":{"gitId":"spinoandraptos"},"content":"* If either the question number is invalid, or no difficulty level is provided,","lastModifiedDate":"2023-10-28"},{"lineNumber":206,"author":{"gitId":"spinoandraptos"},"content":" the app will prompt you to re-enter the markdiff command","lastModifiedDate":"2023-10-28"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":"* The app only supports fixed difficulty levels, assigning any difficulty level that","lastModifiedDate":"2023-10-28"},{"lineNumber":208,"author":{"gitId":"spinoandraptos"},"content":" is not `easy`, `normal`, or `hard` will trigger a warning message","lastModifiedDate":"2023-10-28"},{"lineNumber":209,"author":{"gitId":"spinoandraptos"},"content":"* Input difficulty level is CAPS-friendly","lastModifiedDate":"2023-10-28"},{"lineNumber":210,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":211,"author":{"gitId":"yeo-menghan"},"content":"### Exit Program `bye`","lastModifiedDate":"2023-10-27"},{"lineNumber":212,"author":{"gitId":"yeo-menghan"},"content":"Exits the program","lastModifiedDate":"2023-10-27"},{"lineNumber":213,"author":{"gitId":"yeo-menghan"},"content":"Format: `bye`","lastModifiedDate":"2023-10-27"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":217,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer?","lastModifiedDate":"2020-05-24"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":219,"author":{"gitId":"yeo-menghan"},"content":"**A**: Transfer the tasklist.txt generated to the same local directory as the jar file of the program in another","lastModifiedDate":"2023-10-27"},{"lineNumber":220,"author":{"gitId":"yeo-menghan"},"content":"computer.","lastModifiedDate":"2023-10-27"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":224,"author":{"gitId":"yeo-menghan"},"content":"1. `help` - shows the list of commands you can use","lastModifiedDate":"2023-10-27"},{"lineNumber":225,"author":{"gitId":"yeo-menghan"},"content":"2. `short [question]/[answer]/[module]/[difficulty]` - adds a short answer question and its answer to the list,","lastModifiedDate":"2023-10-27"},{"lineNumber":226,"author":{"gitId":"yeo-menghan"},"content":"3. `list` - shows the list of questions and answers,","lastModifiedDate":"2023-10-27"},{"lineNumber":227,"author":{"gitId":"yeo-menghan"},"content":"4. `delete [question number]` - deletes the question and answer at the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":228,"author":{"gitId":"spinoandraptos"},"content":"5. `find /[description]` - displays all questions that contains the specified description,","lastModifiedDate":"2023-10-28"},{"lineNumber":229,"author":{"gitId":"yeo-menghan"},"content":"6. `find /[module]` - displays all questions that belong to the specified module,","lastModifiedDate":"2023-10-27"},{"lineNumber":230,"author":{"gitId":"yeo-menghan"},"content":"7. `edit [question number] /description [description]` - edits the description of the question with the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":231,"author":{"gitId":"yeo-menghan"},"content":"8. `edit [question number] /answer [answer]` - edits the answer to the question with the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":232,"author":{"gitId":"yeo-menghan"},"content":"9. `start /[quiz mode] [start details] /[qn mode]` - starts the quiz with option for /module or /all and /random or","lastModifiedDate":"2023-10-27"},{"lineNumber":233,"author":{"gitId":"yeo-menghan"},"content":" /normal,","lastModifiedDate":"2023-10-27"},{"lineNumber":234,"author":{"gitId":"yeo-menghan"},"content":"10. `shuffle` - shuffle quiz questions to a random order,","lastModifiedDate":"2023-10-27"},{"lineNumber":235,"author":{"gitId":"yeo-menghan"},"content":"11. `markdiff [question number] [question difficulty]` - sets the difficulty of question with the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":236,"author":{"gitId":"yeo-menghan"},"content":"12. `bye` - exits the program","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"spinoandraptos":100,"StevenGX12":38,"yeo-menghan":76,"-":22}},{"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":"James-Hong-Jey"},"content":" public enum CommandType {HELP, ADD, LIST, EDIT, DELETE, START,","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":" SHUFFLE, MARKDIFFICULTY, END, RESULT, FIND, EXIT, INVALID};","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" private CommandType commandType;","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new blank command.","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public Command(){}","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command of given type.","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * @param commandType Type of command.","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" public Command(CommandType commandType){","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-10-04"},{"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":" * Performs an action according to command.","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){}","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * Checks if the latest command calls for program termination.","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" public boolean toExit(){","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" return commandType \u003d\u003d CommandType.EXIT;","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":31,"James-Hong-Jey":5,"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":"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 delete a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class CommandDelete extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as delete [question number]\";","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_INDEX_MSG \u003d \" Ono! You did not indicate question index :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new delete command for a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnIndex 0-based index of question to be deleted.","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandDelete(int qnIndex){","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.DELETE);","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" this.qnIndex \u003d qnIndex;","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" * Deletes the specified task and updates storage data.","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 task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" String taskName \u003d questions.viewQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" if (taskName.equals(\"Question Not Found\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" ui.displayMessage(\" Ono! The question you are deleting is not found!\");","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" questions.deleteQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":21,"James-Hong-Jey":7,"lisizhuang-0121":13}},{"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":"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-08"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to edit a task.","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandEdit extends Command {","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as edit [question number] \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" \"/description [description] or edit /answer [answer]!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_INDEX_MSG \u003d \" Ono! You did not indicate question index :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_CRITERIA_MSG \u003d \" Ono! You did not indicate if \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" \"you are editing question description or answer :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":" public static final String MISSING_KEYWORD_MSG \u003d \" Ono! You did not enter a new description / answer :\u003c\";","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" private String newDescription;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" private String newAnswer;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new edit command","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" public CommandEdit(int qnIndex, String newDescription, String newAnswer) {","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.EDIT);","lastModifiedDate":"2023-10-05"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" this.qnIndex \u003d qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" this.newDescription \u003d newDescription;","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" this.newAnswer \u003d newAnswer;","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" if (newDescription \u003d\u003d null \u0026\u0026 newAnswer \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" questions.editQuestionByIndex(qnIndex, newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":10,"StevenGX12":5,"James-Hong-Jey":5,"lisizhuang-0121":20}},{"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":"lisizhuang-0121"},"content":" public static final String MISSING_CRITERIA_MSG \u003d \" Ono! You did not indicate \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" \"if you are searching by description or module :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_KEYWORD_MSG \u003d \" Ono! You did not indicate \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":" \"the keywords you are searching by :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as find \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":" \"/description [description] or find /module [module]!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private String searchCriteria;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" private String searchDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new find command to search for a task.","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * @param searchDetails User input containing details of what to search.","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandFind(String searchCriteria, String searchDetails){","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" super((CommandType.FIND));","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" this.searchCriteria \u003d searchCriteria;","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" this.searchDetails \u003d searchDetails;","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" }","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":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Marks the specified task as not done and updates storage data.","lastModifiedDate":"2023-10-04"},{"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":"StevenGX12"},"content":" assert questions !\u003d null \u0026\u0026 dataStorage !\u003d null \u0026\u0026 ui !\u003d null : \"Invalid null parameter\";","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" switch (searchCriteria) {","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"lisizhuang-0121"},"content":" case \"description\":","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" questions.searchListByDescription(searchDetails);","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" case \"module\":","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":" questions.searchListByModule(searchDetails);","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" ui.displayMessage(INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":24,"StevenGX12":1,"James-Hong-Jey":6,"lisizhuang-0121":21}},{"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":"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":"lisizhuang-0121"},"content":"public class CommandHelp extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandHelp() {","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.HELP);","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":" * Displays all commands available to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":" * ","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" assert questions !\u003d null \u0026\u0026 dataStorage !\u003d null \u0026\u0026 ui !\u003d null : \"Invalid null parameter\";","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":1,"StevenGX12":8,"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.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to mark the difficulty of a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkDifficulty extends Command{","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_INDEX_MSG \u003d \" Ono! You did not indicate index of question to be marked :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_DIFFICULTY_MSG \u003d \" Ono! You did not indicate difficulty \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":" \"to be assigned the question :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as markdiff \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" \"[qn number] [qn difficulty]!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public static final String TOO_MANY_ARGUMENTS_MSG \u003d \" Ono! Markdiff command only takes in 2 arguments\";","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private final int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" private final Question.QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command to mark the difficulty of a question of specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * @param qnIndex Index of the question which difficulty is to be marked.","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty to be assigned to the question.","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" public CommandMarkDifficulty(int qnIndex, Question.QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.MARKDIFFICULTY);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" this.qnIndex \u003d qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" assert qnDifficulty !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty !\u003d Question.QnDifficulty.INVALID) {","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" questions.markQuestionDifficulty(qnIndex, qnDifficulty, true);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"spinoandraptos":35,"lisizhuang-0121":4}},{"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":"James-Hong-Jey"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as \" +","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" \"short [question]/[answer]/[module]/[difficulty]!\";","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" public static final String MISSING_FIELDS_MSG \u003d \" You have one or more field missing!\";","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":" private final String description;","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" private final String answer;","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" private final String module;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" private final Question.QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new question command to add a SHORTANSWER question","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" * @param description Question description","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" * @param answer answer to question","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" * @param module module of question","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDifficulty difficulty of question","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandShortAnswer(String description, String answer, String module,","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.ADD);","lastModifiedDate":"2023-10-05"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" this.answer \u003d answer;","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" this.module \u003d module;","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" * Adds the SHORTANSWER question and updates storage data.","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" questions.addShortAnswerQn(description, answer, module, qnDifficulty, true);","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"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":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":16,"James-Hong-Jey":13,"lisizhuang-0121":20}},{"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":"yeo-menghan"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-23"},{"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":"yeo-menghan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"yeo-menghan"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":" * Command to Start the Quiz","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandStart extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_QUIZ_MODE_MSG \u003d \" Ono! You did not indicate mode of the quiz :\u003c \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() + \" Quiz mode must be either \u0027all\u0027 or \u0027module\u0027\";","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_START_DETAILS \u003d \" Ono! You did not indicate start details for the quiz \" +","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" \"mode that you have chosen :\u003c\";","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_QN_MODE_MSG \u003d \" Ono! You did not indicate mode of arranging \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" \"quiz questions :\u003c\";","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_MODE_MSG \u003d \" Question mode must be either \u0027random\u0027 or \u0027normal\u0027\";","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as start \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" \"/[quiz mode] [start details] /[qn mode]!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" public static final String TOO_MANY_ARGUMENTS_MSG \u003d \" Ono! There should not be arguments after /[qn mode]\";","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" private final String startMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" private final String startDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" private final String startQnMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new start command","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * @param startMode Mode to start the quiz with, indicates how questions for the quiz are selected.","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * @param startDetails Details to complement quiz mode for choosing questions for the quiz.","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * @param startQnMode Mode for arranging the questions within the quiz.","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" public CommandStart(String startMode, String startDetails, String startQnMode) {","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.START);","lastModifiedDate":"2023-10-05"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" this.startMode \u003d startMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" this.startDetails \u003d startDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" this.startQnMode \u003d startQnMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":42,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"yeo-menghan"},"content":" * Loop through the array list of questions \u0026 allow the user to answer them.","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"yeo-menghan"},"content":" * If the input given matches EXACTLY (v1.0), then the answer is correct","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"yeo-menghan"},"content":" * returns \"Correct\" or \"Wrong\"","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" assert questions !\u003d null \u0026\u0026 ui !\u003d null \u0026\u0026 dataStorage !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions;","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" switch (startMode.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" case \"module\":","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" assert startDetails !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String[] modules \u003d startDetails.split(\" \");","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" matchedQuestions \u003d questions.categoriseListByModule(modules);","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" case \"all\":","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"yeo-menghan"},"content":" matchedQuestions \u003d questions.getAllQns();","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Please enter a valid quiz mode :\u003c\");","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":" switch(startQnMode.toLowerCase()){","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":" case \"random\":","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"yeo-menghan"},"content":" Collections.shuffle(matchedQuestions); // shuffles matched Questions","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"yeo-menghan"},"content":" questions.startQuiz(ui, matchedQuestions);","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"yeo-menghan"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":" case \"normal\":","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"yeo-menghan"},"content":" questions.startQuiz(ui, matchedQuestions);","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":" default:","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Please enter a valid quiz mode :\u003c\");","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":41,"yeo-menghan":28,"James-Hong-Jey":1,"lisizhuang-0121":14}},{"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":"James-Hong-Jey"},"content":"import quizhub.command.Command;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandExit;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandInvalid;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandList;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandShortAnswer;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandStart;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandEdit;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandDelete;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandFind;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandShuffle;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandMarkDifficulty;","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandHelp;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Represents a parser that converts user inputs into command objects.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":"public class Parser {","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" * Analyses and extracts relevant information from user input","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" * to create a new Command object of the right type.","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" public static Command parseCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" String[] commandTokens \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" if (commandTokens.length \u003d\u003d 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_COMMAND_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" String commandTitle \u003d commandTokens[0];","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" switch (commandTitle) {","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" case \"bye\":","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" return new CommandExit();","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" case \"list\":","lastModifiedDate":"2023-10-04"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" return new CommandList();","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":" case \"short\":","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" return parseShortAnswerCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" case \"start\":","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" return parseStartCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" case \"edit\":","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" return parseEditCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" case \"delete\":","lastModifiedDate":"2023-10-04"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" return parseDeleteCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" case \"find\":","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":" return parseFindCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" case \"shuffle\":","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":" return new CommandShuffle();","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" case \"markdiff\":","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"lisizhuang-0121"},"content":" return parseMarkDiffCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" case \"help\":","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" return new CommandHelp();","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-04"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_COMMAND_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (Exception error) {","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Extracts relevant information after a specified keyword","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * from CLI user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" * @param keyWord The keyword used to partition the user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" public static String getContentAfterKeyword(String userInput, String keyWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" throws ArrayIndexOutOfBoundsException {","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" String content;","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" content \u003d userInput.split(keyWord)[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" if (content.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" return content;","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" * Extracts difficulty from user command to assign to a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * Default invalid difficulty is assigned if invalid difficulty given.","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" * @param difficulty The difficulty level defined by user in CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" public static Question.QnDifficulty extractQuestionDifficulty(String difficulty) {","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" switch (difficulty.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" case \"easy\":","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.EASY;","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" case \"hard\":","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.HARD;","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" case \"normal\":","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Ui.INVALID_QUESTION_DIFFICULTY_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.INVALID;","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Short Answer Command","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Short Answer command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseShortAnswerCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":" String[] inputTokens \u003d userInput.split(\"short\")[1].strip().split(\"/\");","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"lisizhuang-0121"},"content":" String description \u003d inputTokens[0].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":" String answer \u003d inputTokens[1].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":" String module \u003d inputTokens[2].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"lisizhuang-0121"},"content":" String difficulty \u003d inputTokens[3].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" if (description.isEmpty() || answer.isEmpty() || module.isEmpty() || difficulty.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandShortAnswer.MISSING_FIELDS_MSG +","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":" System.lineSeparator() + CommandShortAnswer.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty qnDifficulty \u003d extractQuestionDifficulty(difficulty);","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandShortAnswer(description, answer, module, qnDifficulty);","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandShortAnswer.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Delete Command","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":130,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":131,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Delete command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseDeleteCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"lisizhuang-0121"},"content":" int qnIndex;","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"lisizhuang-0121"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-25"},{"lineNumber":136,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"lisizhuang-0121"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-25"},{"lineNumber":138,"author":{"gitId":"lisizhuang-0121"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-25"},{"lineNumber":139,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandDelete(qnIndex);","lastModifiedDate":"2023-10-25"},{"lineNumber":140,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandDelete.MISSING_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":147,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":148,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":149,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":150,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Find Command","lastModifiedDate":"2023-10-25"},{"lineNumber":151,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":152,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Find command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseFindCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"lisizhuang-0121"},"content":" String searchCriteria;","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"lisizhuang-0121"},"content":" String searchKeyword;","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"lisizhuang-0121"},"content":" searchCriteria \u003d userInput.split(\"/\")[1].strip().split(\" \")[0].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandFind.MISSING_CRITERIA_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"lisizhuang-0121"},"content":" try{","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"lisizhuang-0121"},"content":" searchKeyword \u003d userInput.split(\"/\" + searchCriteria)[1].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandFind.MISSING_KEYWORD_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-25"},{"lineNumber":168,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandFind(searchCriteria, searchKeyword);","lastModifiedDate":"2023-10-25"},{"lineNumber":171,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":172,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":174,"author":{"gitId":"James-Hong-Jey"},"content":" * Attempt to parse user input into an Edit Command","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":177,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Edit command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":178,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":179,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseEditCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":180,"author":{"gitId":"StevenGX12"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"StevenGX12"},"content":" String editCriteria;","lastModifiedDate":"2023-10-26"},{"lineNumber":182,"author":{"gitId":"StevenGX12"},"content":" int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":183,"author":{"gitId":"StevenGX12"},"content":" String newDescription \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":184,"author":{"gitId":"StevenGX12"},"content":" String newAnswer \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":185,"author":{"gitId":"StevenGX12"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":186,"author":{"gitId":"StevenGX12"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":187,"author":{"gitId":"StevenGX12"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"StevenGX12"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":190,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"StevenGX12"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"StevenGX12"},"content":" return new CommandInvalid(CommandEdit.MISSING_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":193,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":194,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":195,"author":{"gitId":"StevenGX12"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"StevenGX12"},"content":" editCriteria \u003d editDetails[2].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"StevenGX12"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":198,"author":{"gitId":"StevenGX12"},"content":" return new CommandInvalid(CommandEdit.MISSING_CRITERIA_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"StevenGX12"},"content":" try{","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"StevenGX12"},"content":" switch (editCriteria){","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"StevenGX12"},"content":" case \"/description\":","lastModifiedDate":"2023-10-26"},{"lineNumber":204,"author":{"gitId":"StevenGX12"},"content":" newDescription \u003d Parser.getContentAfterKeyword(userInput, \"/description\");","lastModifiedDate":"2023-10-26"},{"lineNumber":205,"author":{"gitId":"StevenGX12"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"StevenGX12"},"content":" case \"/answer\":","lastModifiedDate":"2023-10-26"},{"lineNumber":207,"author":{"gitId":"StevenGX12"},"content":" newAnswer \u003d Parser.getContentAfterKeyword(userInput, \"/answer\");","lastModifiedDate":"2023-10-26"},{"lineNumber":208,"author":{"gitId":"StevenGX12"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":209,"author":{"gitId":"StevenGX12"},"content":" default:","lastModifiedDate":"2023-10-26"},{"lineNumber":210,"author":{"gitId":"StevenGX12"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"StevenGX12"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"StevenGX12"},"content":" return new CommandInvalid(CommandEdit.MISSING_KEYWORD_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"StevenGX12"},"content":" return new CommandEdit(qnIndex, newDescription, newAnswer);","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":218,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":219,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":220,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Start Quiz Command","lastModifiedDate":"2023-10-25"},{"lineNumber":221,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":222,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Start Quiz command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":224,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":225,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseStartCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":226,"author":{"gitId":"spinoandraptos"},"content":" String startMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"spinoandraptos"},"content":" String startDetails \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"spinoandraptos"},"content":" String startQnMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\"/\");","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"spinoandraptos"},"content":" String startInfo;","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"spinoandraptos"},"content":" startInfo \u003d commandDetails[1];","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"spinoandraptos"},"content":" startMode \u003d startInfo.split(\" \")[0].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":235,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_QUIZ_MODE_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":236,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":237,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":238,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":239,"author":{"gitId":"spinoandraptos"},"content":" if(!startMode.equalsIgnoreCase(\"all\")){","lastModifiedDate":"2023-10-26"},{"lineNumber":240,"author":{"gitId":"spinoandraptos"},"content":" startDetails \u003d startInfo.split(startMode)[1].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":241,"author":{"gitId":"spinoandraptos"},"content":" if(startDetails.equals(\"\")){","lastModifiedDate":"2023-10-26"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_START_DETAILS + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":243,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":244,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_START_DETAILS + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":248,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":249,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"spinoandraptos"},"content":" // Reads in /random or /normal","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"spinoandraptos"},"content":" startQnMode \u003d commandDetails[2].split(\" \")[0].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"spinoandraptos"},"content":" if (startQnMode.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_QN_MODE_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":255,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":256,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"spinoandraptos"},"content":" if (!startQnMode.equals(\"random\") \u0026\u0026 !startQnMode.equals(\"normal\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"spinoandraptos"},"content":" throw new IllegalArgumentException(CommandStart.INVALID_MODE_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"spinoandraptos"},"content":" if(commandDetails[2].split(\" \").length !\u003d 1){","lastModifiedDate":"2023-10-27"},{"lineNumber":261,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.TOO_MANY_ARGUMENTS_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":262,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":263,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":264,"author":{"gitId":"spinoandraptos"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(e.getMessage() + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-27"},{"lineNumber":268,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_QN_MODE_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":269,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":270,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"spinoandraptos"},"content":" return new CommandStart(startMode, startDetails, startQnMode);","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":273,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":274,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":275,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Mark Difficulty Command","lastModifiedDate":"2023-10-25"},{"lineNumber":276,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":277,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":278,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Mark Difficulty command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":279,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":280,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseMarkDiffCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":281,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"spinoandraptos"},"content":" int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"spinoandraptos"},"content":" Question.QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"spinoandraptos"},"content":" String qnIndexString;","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"spinoandraptos"},"content":" String qnDifficultyString;","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"spinoandraptos"},"content":" qnIndexString \u003d commandDetails[1].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandMarkDifficulty.MISSING_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"spinoandraptos"},"content":" CommandMarkDifficulty.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"spinoandraptos"},"content":" qnIndex \u003d Integer.parseInt(qnIndexString);","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"spinoandraptos"},"content":" if(qnIndex \u003c 0){","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":296,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":298,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":299,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"spinoandraptos"},"content":" qnDifficultyString \u003d commandDetails[2].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandMarkDifficulty.MISSING_DIFFICULTY_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"spinoandraptos"},"content":" if(commandDetails.length !\u003d 3){","lastModifiedDate":"2023-10-27"},{"lineNumber":306,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandMarkDifficulty.TOO_MANY_ARGUMENTS_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":307,"author":{"gitId":"spinoandraptos"},"content":" CommandMarkDifficulty.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":308,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":309,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Parser.extractQuestionDifficulty(qnDifficultyString);","lastModifiedDate":"2023-10-26"},{"lineNumber":310,"author":{"gitId":"spinoandraptos"},"content":" return new CommandMarkDifficulty(qnIndex, qnDifficulty);","lastModifiedDate":"2023-10-26"},{"lineNumber":311,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":312,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":143,"StevenGX12":36,"James-Hong-Jey":20,"lisizhuang-0121":113}},{"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, INVALID};","lastModifiedDate":"2023-10-27"},{"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":"StevenGX12"},"content":" if(!newDescription.equals(\"\")){","lastModifiedDate":"2023-10-26"},{"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":33,"James-Hong-Jey":8,"lisizhuang-0121":3}},{"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":"StevenGX12"},"content":" if(!newAnswer.equals(\"\")){","lastModifiedDate":"2023-10-26"},{"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":2,"James-Hong-Jey":5,"lisizhuang-0121":2}},{"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":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.ShortAnsQn;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * Represents the list of questions currently registered in Quizhub.","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" * This list is created on program start and disposed on program termination.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":"public class QuestionList {","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private ArrayList\u003cQuestion\u003e allQns; //array of inputs","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new empty question list.","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" public QuestionList(){","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" allQns \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" * Adds a short answer question to the current question list.","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" * @param description The Question Description","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" * @param answer The answer of the Question","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" * @param module The module of the Question","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDifficulty The difficulty level of the questions","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"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":32,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" public void addShortAnswerQn(String description, String answer, String module,","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty qnDifficulty, boolean showMessage){","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" allQns.add(new ShortAnsQn(description, answer, module, qnDifficulty));","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" I have added the following question OwO:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S] %s\\n\", viewQuestionByIndex(getQuestionListSize()));","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints the details of a question in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"James-Hong-Jey"},"content":" * @param question The question in which details are to be printed.","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"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":47,"author":{"gitId":"James-Hong-Jey"},"content":" * in addition to the details of the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestion(Question question, boolean asList){","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"James-Hong-Jey"},"content":" int qnIndex \u003d allQns.indexOf(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"James-Hong-Jey"},"content":" switch(question.getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":" if (question.questionIsDone()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][X] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][X] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"James-Hong-Jey"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints all the questions in the current question list as an indexed list.","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestionList(){","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No questions found! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"James-Hong-Jey"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"James-Hong-Jey"},"content":" * after question is marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsDone (int index, boolean showMessage){","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" if(!question.questionIsDone()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" question.markAsDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"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":98,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":105,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":107,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":108,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as not done.","lastModifiedDate":"2023-10-08"},{"lineNumber":109,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":110,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsNotDone(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":111,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" if(question.questionIsDone()){","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" question.markAsNotDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"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":116,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally not done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" * Mark the difficulty of a question in the current question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty to be assigned to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" * after question difficulty is marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" public void markQuestionDifficulty(int index, Question.QnDifficulty qnDifficulty, boolean showMessage){","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" String difficulty \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":" switch (qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" case EASY:","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"easy\";","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" case HARD:","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"hard\";","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" case NORMAL:","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"normal\";","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" if(question.getDifficulty() !\u003d qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" allQns.get(index-1).markDifficulty(qnDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" if(showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have marked the following question as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" \" \u003ew\u003c !\");","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question is already set as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":" \" ! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":164,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":165,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":166,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":167,"author":{"gitId":"James-Hong-Jey"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":168,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":169,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":170,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":171,"author":{"gitId":"James-Hong-Jey"},"content":" public void deleteQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":172,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":173,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":174,"author":{"gitId":"James-Hong-Jey"},"content":" allQns.remove(index - 1);","lastModifiedDate":"2023-10-08"},{"lineNumber":175,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have deleted the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":176,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":177,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":178,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":179,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":180,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":181,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":182,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":183,"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":184,"author":{"gitId":"James-Hong-Jey"},"content":" * Used to display question details in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":185,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":186,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be viewed.","lastModifiedDate":"2023-10-08"},{"lineNumber":187,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":188,"author":{"gitId":"James-Hong-Jey"},"content":" public String viewQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":189,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":190,"author":{"gitId":"James-Hong-Jey"},"content":" switch(allQns.get(index-1).getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":191,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":192,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.get(index-1).getQuestionDescription();","lastModifiedDate":"2023-10-08"},{"lineNumber":193,"author":{"gitId":"James-Hong-Jey"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":194,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":195,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":196,"author":{"gitId":"StevenGX12"},"content":" } catch(InputMismatchException |NullPointerException | IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-21"},{"lineNumber":197,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":198,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":199,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":200,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":201,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":202,"author":{"gitId":"spinoandraptos"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":203,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":204,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":205,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":206,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestionByIndex(int index, String newDescription, String newAnswer){","lastModifiedDate":"2023-10-08"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":208,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":209,"author":{"gitId":"spinoandraptos"},"content":" question.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":210,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have edited the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":211,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":212,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":213,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":214,"author":{"gitId":"spinoandraptos"},"content":" if(index !\u003d 0){","lastModifiedDate":"2023-10-08"},{"lineNumber":215,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":216,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":217,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":218,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":219,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":220,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their description.","lastModifiedDate":"2023-10-08"},{"lineNumber":221,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":222,"author":{"gitId":"James-Hong-Jey"},"content":" * @param keyword Description keyword(s) used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":223,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":224,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByDescription(String keyword){","lastModifiedDate":"2023-10-08"},{"lineNumber":225,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":226,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":227,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":228,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":229,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":230,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":231,"author":{"gitId":"StevenGX12"},"content":" if(question.getQuestionDescription().toLowerCase().contains(keyword.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":232,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":233,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":234,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":235,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":236,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":237,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No results found :\u003c Check your keyword is correct?\");","lastModifiedDate":"2023-10-08"},{"lineNumber":238,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":239,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":240,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":241,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":242,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their date and time.","lastModifiedDate":"2023-10-08"},{"lineNumber":243,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":244,"author":{"gitId":"James-Hong-Jey"},"content":" * @param dateTime Date and time used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":245,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":246,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByTime(String dateTime){","lastModifiedDate":"2023-10-08"},{"lineNumber":247,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":248,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":249,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":250,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":251,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":252,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":253,"author":{"gitId":"James-Hong-Jey"},"content":" if(question.getQuestionTiming(true).contains(dateTime)){","lastModifiedDate":"2023-10-08"},{"lineNumber":254,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":255,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":256,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":257,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":258,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":259,"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":260,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":261,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":262,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":263,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":264,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":265,"author":{"gitId":"StevenGX12"},"content":" * Search for questions in the current question list using their module.","lastModifiedDate":"2023-10-21"},{"lineNumber":266,"author":{"gitId":"StevenGX12"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":267,"author":{"gitId":"StevenGX12"},"content":" * @param module Module used to search for matches.","lastModifiedDate":"2023-10-21"},{"lineNumber":268,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":269,"author":{"gitId":"StevenGX12"},"content":" public void searchListByModule(String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":270,"author":{"gitId":"StevenGX12"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":271,"author":{"gitId":"StevenGX12"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":272,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-21"},{"lineNumber":273,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":274,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-21"},{"lineNumber":275,"author":{"gitId":"StevenGX12"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-21"},{"lineNumber":276,"author":{"gitId":"StevenGX12"},"content":" if(question.getModule().toLowerCase().contains(module.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":277,"author":{"gitId":"StevenGX12"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-21"},{"lineNumber":278,"author":{"gitId":"StevenGX12"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-21"},{"lineNumber":279,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":280,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":281,"author":{"gitId":"StevenGX12"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":282,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" No results found :\u003c Check your module is correct?\");","lastModifiedDate":"2023-10-21"},{"lineNumber":283,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":284,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":285,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":286,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":287,"author":{"gitId":"spinoandraptos"},"content":" * Build a new list of questions based on specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":288,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":289,"author":{"gitId":"spinoandraptos"},"content":" * @param modules Modules used to search for matches.","lastModifiedDate":"2023-10-27"},{"lineNumber":290,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":291,"author":{"gitId":"spinoandraptos"},"content":" public ArrayList\u003cQuestion\u003e categoriseListByModule(String[] modules){","lastModifiedDate":"2023-10-27"},{"lineNumber":292,"author":{"gitId":"spinoandraptos"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":293,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":294,"author":{"gitId":"spinoandraptos"},"content":" if (allQns.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":295,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-22"},{"lineNumber":296,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":297,"author":{"gitId":"spinoandraptos"},"content":" for (String module : modules) {","lastModifiedDate":"2023-10-27"},{"lineNumber":298,"author":{"gitId":"spinoandraptos"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-22"},{"lineNumber":299,"author":{"gitId":"spinoandraptos"},"content":" if (question.getModule().toLowerCase().matches(module.toLowerCase())) {","lastModifiedDate":"2023-10-22"},{"lineNumber":300,"author":{"gitId":"spinoandraptos"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-22"},{"lineNumber":301,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":302,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":303,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":304,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":305,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions emptyList){","lastModifiedDate":"2023-10-22"},{"lineNumber":306,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(emptyList.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":307,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":308,"author":{"gitId":"spinoandraptos"},"content":" return matchedQuestions;","lastModifiedDate":"2023-10-22"},{"lineNumber":309,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":310,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":311,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns the size of current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":312,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":313,"author":{"gitId":"James-Hong-Jey"},"content":" public int getQuestionListSize(){","lastModifiedDate":"2023-10-08"},{"lineNumber":314,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.size();","lastModifiedDate":"2023-10-08"},{"lineNumber":315,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":316,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":317,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns a list of all questions in the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":318,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":319,"author":{"gitId":"James-Hong-Jey"},"content":" public ArrayList\u003cQuestion\u003e getAllQns(){","lastModifiedDate":"2023-10-08"},{"lineNumber":320,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns;","lastModifiedDate":"2023-10-08"},{"lineNumber":321,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":322,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":323,"author":{"gitId":"James-Hong-Jey"},"content":" * Shuffles the order of questions in the deck","lastModifiedDate":"2023-10-21"},{"lineNumber":324,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":325,"author":{"gitId":"James-Hong-Jey"},"content":" public void shuffleQuestions() {","lastModifiedDate":"2023-10-21"},{"lineNumber":326,"author":{"gitId":"James-Hong-Jey"},"content":" Collections.shuffle(allQns);","lastModifiedDate":"2023-10-21"},{"lineNumber":327,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":328,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":329,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the answer for a question by its index in the question list.","lastModifiedDate":"2023-10-09"},{"lineNumber":330,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-09"},{"lineNumber":331,"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":332,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":333,"author":{"gitId":"spinoandraptos"},"content":" public String getAnswerByIndex(int index, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":334,"author":{"gitId":"yeo-menghan"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":335,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(index - 1);","lastModifiedDate":"2023-10-22"},{"lineNumber":336,"author":{"gitId":"yeo-menghan"},"content":" if (question instanceof ShortAnsQn) {","lastModifiedDate":"2023-10-09"},{"lineNumber":337,"author":{"gitId":"yeo-menghan"},"content":" return ((ShortAnsQn) question).getQuestionAnswer();","lastModifiedDate":"2023-10-09"},{"lineNumber":338,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":339,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" This question is not a Short Answer question.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":340,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":341,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":342,"author":{"gitId":"yeo-menghan"},"content":" } catch (IndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-09"},{"lineNumber":343,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Ono! Please enter a valid question number *sobs*\");","lastModifiedDate":"2023-10-09"},{"lineNumber":344,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":345,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":346,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":347,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":348,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the question by its index in the question list.","lastModifiedDate":"2023-10-16"},{"lineNumber":349,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":350,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-16"},{"lineNumber":351,"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":352,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":353,"author":{"gitId":"yeo-menghan"},"content":" public String getQuestionTextByIndex(int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":354,"author":{"gitId":"yeo-menghan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c allQns.size()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":355,"author":{"gitId":"yeo-menghan"},"content":" Question question \u003d allQns.get(index);","lastModifiedDate":"2023-10-16"},{"lineNumber":356,"author":{"gitId":"yeo-menghan"},"content":" return question.toString(); // Use the toString() method to get the text of the question","lastModifiedDate":"2023-10-16"},{"lineNumber":357,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":358,"author":{"gitId":"yeo-menghan"},"content":" return null; // Handle invalid index","lastModifiedDate":"2023-10-16"},{"lineNumber":359,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":360,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":361,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":362,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":363,"author":{"gitId":"yeo-menghan"},"content":" * Starts a quiz session using the provided user interface (UI).","lastModifiedDate":"2023-10-09"},{"lineNumber":364,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":365,"author":{"gitId":"yeo-menghan"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":366,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":367,"author":{"gitId":"spinoandraptos"},"content":" public void startQuiz(Ui ui, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":368,"author":{"gitId":"spinoandraptos"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":369,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" No questions found! Add questions before starting the quiz.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":370,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-09"},{"lineNumber":371,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":372,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":373,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" Starting the quiz...\");","lastModifiedDate":"2023-10-17"},{"lineNumber":374,"author":{"gitId":"spinoandraptos"},"content":" int totalQuestions \u003d questions.size();","lastModifiedDate":"2023-10-22"},{"lineNumber":375,"author":{"gitId":"yeo-menghan"},"content":" int correctAnswers \u003d 0;","lastModifiedDate":"2023-10-09"},{"lineNumber":376,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":377,"author":{"gitId":"yeo-menghan"},"content":" for (int i \u003d 0; i \u003c totalQuestions; i++) {","lastModifiedDate":"2023-10-09"},{"lineNumber":378,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":379,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":380,"author":{"gitId":"yeo-menghan"},"content":" ui.displayQuestion(question, i + 1, totalQuestions);","lastModifiedDate":"2023-10-09"},{"lineNumber":381,"author":{"gitId":"spinoandraptos"},"content":" String correctAnswer \u003d getAnswerByIndex(i + 1, questions).strip(); // Get correct answer by index","lastModifiedDate":"2023-10-22"},{"lineNumber":382,"author":{"gitId":"lisizhuang-0121"},"content":" String userAnswer \u003d ui.getUserInput().strip();","lastModifiedDate":"2023-10-17"},{"lineNumber":383,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":384,"author":{"gitId":"yeo-menghan"},"content":" if (userAnswer.equalsIgnoreCase(correctAnswer)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":385,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Correct!\");","lastModifiedDate":"2023-10-27"},{"lineNumber":386,"author":{"gitId":"yeo-menghan"},"content":" correctAnswers++;","lastModifiedDate":"2023-10-09"},{"lineNumber":387,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":388,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Wrong!\");","lastModifiedDate":"2023-10-27"},{"lineNumber":389,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":390,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":391,"author":{"gitId":"yeo-menghan"},"content":" int questionsLeft \u003d totalQuestions - (i + 1);","lastModifiedDate":"2023-10-09"},{"lineNumber":392,"author":{"gitId":"yeo-menghan"},"content":" if (questionsLeft \u003e 0) {","lastModifiedDate":"2023-10-09"},{"lineNumber":393,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Questions left: \" + questionsLeft);","lastModifiedDate":"2023-10-27"},{"lineNumber":394,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":395,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Quiz completed!\");","lastModifiedDate":"2023-10-27"},{"lineNumber":396,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":397,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":398,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Your score: \" + correctAnswers + \"/\" + totalQuestions);","lastModifiedDate":"2023-10-27"},{"lineNumber":399,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":400,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"spinoandraptos":121,"StevenGX12":25,"James-Hong-Jey":184,"yeo-menghan":59,"lisizhuang-0121":11}},{"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":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import java.io.File;","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * Represents the hard disk storage where","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" * question data is stored, read and updated.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"public class Storage {","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" private File dataFile;","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is stored and read from.","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" dataFile \u003d new File(filePath);","lastModifiedDate":"2023-10-04"},{"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":" * Write in new data to storage.","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is written to.","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param textToAdd Data to be written.","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"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":31,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" private void writeToFile(String filePath, String textToAdd, boolean toAppend) throws IOException {","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath, toAppend);","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.write(textToAdd);","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.close();","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" * Adds a question from storage into question list being built.","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnType Type of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDescription Description of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDoneStatus Done status of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" * @param difficulty Difficulty of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnModule Module of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" private int addQuestionFromFile(QuestionList questions, String qnType, String qnDescription,","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" String qnDoneStatus, Question.QnDifficulty difficulty,","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" String qnModule) {","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" switch (qnType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" case \"S\":","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"lisizhuang-0121"},"content":" // Split the description by \"/\" and check for empty fields","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" String[] qnTokens \u003d qnDescription.split(\"/\");","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"lisizhuang-0121"},"content":" if (qnTokens[0].isEmpty() || qnTokens[1].isEmpty() || qnModule.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"lisizhuang-0121"},"content":" return 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"lisizhuang-0121"},"content":" questions.addShortAnswerQn(qnTokens[0], qnTokens[1], qnModule, difficulty, false);","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"lisizhuang-0121"},"content":" if (qnDoneStatus.equals(\"done\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"lisizhuang-0121"},"content":" questions.markQuestionAsDone(questions.getQuestionListSize(), false);","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" return 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" return 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" return 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" * Parse raw questions read from the question file and store them in the questionList","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":" * Used at start of program to load all questions from the file","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" * @param rawQuestions the arrayList of question strings to be parsed","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" * @param questions the questionList object for string parsed questions","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseQuestionsFromStrings(ArrayList\u003cString\u003e rawQuestions, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" int failedQuestions \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" for (int i \u003d 1; i \u003c rawQuestions.size(); i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" String currentQuestion \u003d rawQuestions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"lisizhuang-0121"},"content":" String[] questionSubStrings \u003d currentQuestion.split(\"\\\\|\");","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":" String questionType \u003d questionSubStrings[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDoneStatus \u003d questionSubStrings[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDescription \u003d questionSubStrings[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"lisizhuang-0121"},"content":" String questionModule \u003d questionSubStrings[3].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDifficulty \u003d questionSubStrings[4].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty difficulty \u003d Parser.extractQuestionDifficulty(questionDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":" failedQuestions +\u003d addQuestionFromFile(questions, questionType, questionDescription,","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" questionDoneStatus, difficulty, questionModule);","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" failedQuestions++;","lastModifiedDate":"2023-10-25"},{"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":" System.out.println(\" \" + failedQuestions + \" questions parsed unsuccessfully from storage file\\n\");","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" * Build a new question list from data stored in hard disk.","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"James-Hong-Jey"},"content":" * Used at program start to build the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":101,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" public void buildCurrentListFromFile(QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" if (dataFile.createNewFile()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":106,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question-list created: \" + dataFile.getName());","lastModifiedDate":"2023-10-08"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" } catch(NullPointerException | IOException invalidFilePath) {","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":111,"author":{"gitId":"James-Hong-Jey"},"content":" int questionIndex \u003d 0;","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" Scanner fileScanner \u003d new Scanner(dataFile);","lastModifiedDate":"2023-10-04"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":" // Pipe all lines into string arrayList for processing","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":" ArrayList\u003cString\u003e rawQuestions \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" String rawQuestion \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":" rawQuestions.add(rawQuestion);","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":" if (rawQuestions.size() \u003c\u003d 1) {","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":123,"author":{"gitId":"lisizhuang-0121"},"content":" parseQuestionsFromStrings(rawQuestions, questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"James-Hong-Jey"},"content":" } catch(NullPointerException | IOException invalidFilePath) {","lastModifiedDate":"2023-10-25"},{"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":"James-Hong-Jey"},"content":" } catch(NullPointerException | IOException invalidFilePath) {","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-10-04"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":73,"James-Hong-Jey":26,"lisizhuang-0121":78}},{"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":"James-Hong-Jey"},"content":" public static final String INVALID_COMMAND_MSG \u003d \" Please enter a valid command :0\";","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_COMMAND_FEEDBACK \u003d \" Here are the list of commands you can use:\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" \" 1. help - shows the list of commands you can use,\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" \" 2. short [question]/[answer]/[module]/[difficulty] - adds a short answer question and \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" \"its answer to the list,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" \" 3. list - shows the list of questions and answers,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \" 6. find /[module] - displays all questions that belong to the specified module,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" \" 7. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" \" 8. edit [question number] /answer [answer] - edits the answer to the question with \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" \"the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" \" 9. start /[quiz mode] [start details] /[qn mode] - \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" \"starts the quiz with option for /module or /all and /random or /normal,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" \" 10. shuffle - shuffle quiz questions to a random order,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" \" 11. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" \" 12. bye - exits the program\";","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_INTEGER_INDEX_MSG \u003d \" Please enter valid integer index!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_QUESTION_NUMBER_MSG \u003d \" Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_QUESTION_DIFFICULTY_MSG \u003d \" Ono! We only support easy, normal and hard \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" \"difficulty levels\" + System.lineSeparator() + \" No changes will be made to your difficulty level\";","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" private final Scanner input \u003d new Scanner(System.in); // Create a Scanner object","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" private QuestionList tasks;","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" * Sets up the bridging between the UI and tasks data.","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"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":57,"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":58,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" public Ui(Storage dataStorage, QuestionList tasks){","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" this.dataStorage \u003d dataStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" * Print out separating line in CLI to mark","lastModifiedDate":"2023-10-04"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" * start and end of chatbot replies.","lastModifiedDate":"2023-10-04"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" public void showLine(){","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" * Displays app logo and opening message to welcome users","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * on the launch of chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" public void displayOpeningMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" String logo \u003d \" _______ _________ _______ ______ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" \" ( ___ )|\\\\ /|\\\\__ __// ___ )|\\\\ /||\\\\ /|( ___ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" \" | ( ) || ) ( | ) ( \\\\/ ) || ) ( || ) ( || ( ) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / )| (___) || | | || (__/ / \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / / | ___ || | | || __ ( \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" \" | | /\\\\| || | | | | | / / | ( ) || | | || ( \\\\ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" \" | (_\\\\ \\\\ || (___) |___) (___ / (_/\\\\| ) ( || (___) || )___) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" \" (____\\\\/_)(_______)\\\\_______/(_______/|/ \\\\|(_______)|/ \\\\___/\";","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" System.out.println(logo);","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Welcome to Quizhub!!!\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Let the quizzing begin XDD\");","lastModifiedDate":"2023-10-09"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" System.out.println();","lastModifiedDate":"2023-10-04"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.loadData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" assert tasks !\u003d null : \"Invalid null tasks\";","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" * Retrieves the CLI input from the user","lastModifiedDate":"2023-10-04"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" * and documents it as a String object.","lastModifiedDate":"2023-10-04"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" if(input.hasNextLine()){","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" * Displays closing message on exiting the chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" public void displayClosingMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Are you sure you want to stop quizzing?\");","lastModifiedDate":"2023-10-09"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Well... hope you had fun quizzing :D\");","lastModifiedDate":"2023-10-09"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" See you again soon!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":115,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":116,"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":117,"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":118,"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":119,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":120,"author":{"gitId":"yeo-menghan"},"content":" * @param question The Question object containing the question description.","lastModifiedDate":"2023-10-09"},{"lineNumber":121,"author":{"gitId":"yeo-menghan"},"content":" * @param currentQuestionIndex The index of the current question in the set of questions.","lastModifiedDate":"2023-10-09"},{"lineNumber":122,"author":{"gitId":"yeo-menghan"},"content":" * @param totalQuestions The total count of questions in the set.","lastModifiedDate":"2023-10-09"},{"lineNumber":123,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":124,"author":{"gitId":"yeo-menghan"},"content":" public void displayQuestion(Question question, int currentQuestionIndex, int totalQuestions) {","lastModifiedDate":"2023-10-09"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" showLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Question \" + currentQuestionIndex + \" / \" + totalQuestions + \":\");","lastModifiedDate":"2023-10-09"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" // getQuestionDescription returns question/answer","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" String questionDescription \u003d question.getQuestionDescription();","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":" String[] parts \u003d questionDescription.split(\"/\");","lastModifiedDate":"2023-10-09"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":131,"author":{"gitId":"yeo-menghan"},"content":" if (parts.length \u003e\u003d 1) {","lastModifiedDate":"2023-10-09"},{"lineNumber":132,"author":{"gitId":"yeo-menghan"},"content":" // Extract and display the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":133,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" \" + parts[0]); // part[0] returns the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":134,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":135,"author":{"gitId":"yeo-menghan"},"content":" // Handle the case where the format is invalid","lastModifiedDate":"2023-10-09"},{"lineNumber":136,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Invalid question format, please edit this question via the edit function\");","lastModifiedDate":"2023-10-09"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":138,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":139,"author":{"gitId":"yeo-menghan"},"content":" System.out.print(\" Your Answer: \");","lastModifiedDate":"2023-10-09"},{"lineNumber":140,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":141,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":142,"author":{"gitId":"lisizhuang-0121"},"content":" public void showInvalidCommandHelp(String feedback) {","lastModifiedDate":"2023-10-12"},{"lineNumber":143,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":144,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":145,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"yeo-menghan"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":95,"StevenGX12":17,"James-Hong-Jey":3,"yeo-menghan":30,"lisizhuang-0121":5}},{"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.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"public class CommandDeleteTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" private Parser parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" private Ui ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-25"},{"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":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-25"},{"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":" assert expectedOutput !\u003d null : \"Expected output should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(expectedOutput + \"\\n\" +actualOutput);","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","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":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with out-of-bound index","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" void testDeleteOutOfBoundIndex() {","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(-1);","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-21"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with invalid type index","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" void testDeleteInvalidTypeIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(\"delete test\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with missing index","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" void testDeleteMissingIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandDelete.MISSING_INDEX_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(\"delete\").executeCommand(ui, mockStorage, questionList);;","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" // /**","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" // * Test deleting with valid index","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":" // * */","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" void testDeleteValidIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have deleted the following question \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"lisizhuang-0121"},"content":" \" [S][X] Question1 / Answer1 | Mod1 | NORMAL\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":" \" Now you have 3 questions in the list! UWU\";","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(1);","lastModifiedDate":"2023-10-21"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":9,"StevenGX12":88,"James-Hong-Jey":4,"lisizhuang-0121":11}},{"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":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"public class CommandEditTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" private static MockStorage mockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" @BeforeAll","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" public static void setQuestionList(@TempDir Path tempDir) {","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question4 / Answer4 / Mod4 / NORMAL\" };","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","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":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with out-of-bound index","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" void testEditOutOfBoundIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit -1 /description NewDescription\";","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" }","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":" * Test editing with non-integer index","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" void testEditNonIntIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit abc /description NewDescription\";","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with blank description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" void testEditBlankDes(){","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandEdit.MISSING_KEYWORD_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 1 /description \";","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled answer and blank description","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" void testEditBlankAns(){","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandEdit.MISSING_KEYWORD_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 1 /answer \";","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","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":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and blank answer","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":" void testEditNoIndex(){","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandEdit.MISSING_INDEX_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit \";","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" * Test editing with filled description and answer","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" * */","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":" void testEditValidDescription(){","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" \" [S][X] NewDescription / Answer3 | Mod3 | NORMAL\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 3 /description NewDescription\";","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"StevenGX12"},"content":" void testEditValidAnswer(){","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"StevenGX12"},"content":" \" [S][] Question4 / NewAnswer | Mod4 | NORMAL\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 4 /answer NewAnswer\";","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":98,"StevenGX12":29,"James-Hong-Jey":5,"lisizhuang-0121":15}},{"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":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":"public class CommandFindTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" private static MockStorage mockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" @BeforeAll","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" public static void setQuestionList(@TempDir Path tempDir) {","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" \"short Question4 / Answer4 / Mod4 / NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" };","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(3, showMessage);","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":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","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":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"StevenGX12"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" assert expectedOutput !\u003d null : \"Expected output should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" }","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":" * Test finding with no criteria","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" void testFindNoCriteria() {","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandFind.MISSING_CRITERIA_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no keyword","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoKeyword() {","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandFind.MISSING_KEYWORD_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find /description\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with matches","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionWithMatches() {","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"lisizhuang-0121"},"content":" + \" 1: [S][X] Question1 / Answer1 | Mod1 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"lisizhuang-0121"},"content":" + \" 2: [S][] Question2 / Answer2 | Mod2 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":" + \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" + \" 4: [S][] Question4 / Answer4 | Mod4 | NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find /description Question\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no matches","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoMatches() {","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":" + \" No results found :\u003c Check your keyword is correct?\";","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find /description no matches\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" * Test finding by module with no keyword","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" void testFindModuleNoKeyword() {","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandFind.MISSING_KEYWORD_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":" CommandFind.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(\"find /module\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"StevenGX12"},"content":" * Test finding by module with matches","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"StevenGX12"},"content":" */ ","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"StevenGX12"},"content":" void testFindModuleWithMatches() {","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"StevenGX12"},"content":" + \" 1: [S][X] Question1 / Answer1 | Mod1 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"StevenGX12"},"content":" + \" 2: [S][] Question2 / Answer2 | Mod2 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"StevenGX12"},"content":" + \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"StevenGX12"},"content":" + \" 4: [S][] Question4 / Answer4 | Mod4 | NORMAL\";","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(\"find /module Mod\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"StevenGX12"},"content":" * Test finding by module with no matches","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"StevenGX12"},"content":" void testFindModuleNoMatches() {","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"StevenGX12"},"content":" + \" No results found :\u003c Check your module is correct?\";","lastModifiedDate":"2023-10-26"},{"lineNumber":153,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(\"find /module no matches\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":154,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-26"},{"lineNumber":155,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":156,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":10,"StevenGX12":112,"James-Hong-Jey":2,"lisizhuang-0121":32}},{"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":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","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":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" * Test if help command displays the correct output","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" * */","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" public void testHelpCommand() {","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" String expectedOutput\u003d \"Here are the list of commands you can use:\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":" \" 1. help - shows the list of commands you can use\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":" \" 2. short [question]/[answer]/[module]/[difficulty] - adds a short answer question and \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":" \"its answer to the list,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":" \" 3. list - shows the list of questions and answers,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"James-Hong-Jey"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":" \" 6. find /[module] - displays all questions that belong to the specified module,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"James-Hong-Jey"},"content":" \" 7. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"James-Hong-Jey"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":" \" 8. edit [question number] /answer [answer] - edits the answer to the question with \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":" \"the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":" \" 9. start /[quiz mode] [start details] /[qn mode] - \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":" \"starts the quiz with option for /module or /all and /random or /normal,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"James-Hong-Jey"},"content":" \" 10. shuffle - shuffle quiz questions to a random order,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"James-Hong-Jey"},"content":" \" 11. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"James-Hong-Jey"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" \" 12. bye - exits the program\";","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" CommandHelp help \u003d new CommandHelp();","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":" help.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" // MockStorage class for testing, using in-data memory","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" super(filepath);","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-18"},{"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":" public String loadData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" return \"\";","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" public void clearData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":" questions.clear();","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":1,"StevenGX12":93,"James-Hong-Jey":19,"lisizhuang-0121":3}},{"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":"lisizhuang-0121"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"public class CommandListTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" private static MockStorage mockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" public void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output.","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same.","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" }","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":" * Test display of empty question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" void testListEmptyList(){","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"No questions found! Time to add some OWO\";","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","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":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" * with one unmarked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"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 testListOneUnmarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][] Question / Answer | Mod1 | EASY\";","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question\", \"Answer\", \"Mod1\",","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.EASY, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" String actualOutput \u003d outputStreamCaptor.toString().strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * with one marked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" void testListOneMarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question\", \"Answer\", \"Mod1\",","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.HARD, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.markQuestionAsDone(1, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][X] Question / Answer | Mod1 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" * with a mix of marked and unmarked SHORTANSWER questions.","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" void testListMixedShorts(){","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question1\", \"Answer1\", \"Mod1\",","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.HARD, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question2\", \"Answer2\", \"Mod2\",","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.HARD, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question3\", \"Answer3\", \"Mod3\",","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.NORMAL, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question4\", \"Answer4\", \"Mod4\",","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.EASY, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.markQuestionAsDone(1, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.markQuestionAsDone(3, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" \"1: [S][X] Question1 / Answer1 | Mod1 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" \" 2: [S][] Question2 / Answer2 | Mod2 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" \" 4: [S][] Question4 / Answer4 | Mod4 | EASY\" ;","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":85,"lisizhuang-0121":24}},{"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":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" private QuestionList questionList;","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":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * Test marking without question index and difficulty level","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNoIndexNoDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff\";","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandMarkDifficulty.MISSING_INDEX_MSG.strip()","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" + CommandMarkDifficulty.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" * Test marking without question difficulty to assign","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNoDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1\";","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandMarkDifficulty.MISSING_DIFFICULTY_MSG.strip();","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with out-of-bound index","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffOutOfBoundIndex(){","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff -1 NORMAL\";","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG.strip();","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with non-integer index","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNonIntIndex(){","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff ?@!# NORMAL\";","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG.strip();","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question non-existent difficulty level","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffWrongDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 ???\";","lastModifiedDate":"2023-10-27"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_QUESTION_DIFFICULTY_MSG.strip()","lastModifiedDate":"2023-10-27"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" .replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question multiple difficulty levels","lastModifiedDate":"2023-10-27"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-27"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffMultipleDifficulty(){","lastModifiedDate":"2023-10-27"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 NORMAL hard EASY\";","lastModifiedDate":"2023-10-27"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandMarkDifficulty.TOO_MANY_ARGUMENTS_MSG.strip()","lastModifiedDate":"2023-10-27"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" + CommandMarkDifficulty.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question same difficulty as its current one","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffRepeatedDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 NORMAL\";","lastModifiedDate":"2023-10-27"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Question is already set as normal ! No changes made!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question different, correct difficulty level","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffCorrectDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 2 HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have marked the following question as hard \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] Question2 / Answer2 | Mod2 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"spinoandraptos":158,"James-Hong-Jey":4,"lisizhuang-0121":5}},{"path":"src/test/java/quizhub/command/CommandStartTest.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":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.MockUi;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":"public class CommandStartTest {","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yeo-menghan"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yeo-menghan"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" private Ui ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" @Nested","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" public class UninitialisedQnListBlock {","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"yeo-menghan"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yeo-menghan"},"content":" public void setUp(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yeo-menghan"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yeo-menghan"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":" public void testStartQuizWithNoQuestions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all /random\";","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"No questions found! Add questions before starting the quiz.\";","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz when question list is empty","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" @Nested","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" public class InitialisedQnListWithErrorBlock {","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" * Create a new blank question list","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d {\"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\"};","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz without specifying quiz mode","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizNoQuizMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start\";","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QUIZ_MODE_MSG.strip().replace(System.lineSeparator(), \"\")","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode without start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeNoDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all\";","lastModifiedDate":"2023-10-27"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QN_MODE_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode with start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeWithDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all details\";","lastModifiedDate":"2023-10-27"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QN_MODE_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode without start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeNoDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module\";","lastModifiedDate":"2023-10-27"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_START_DETAILS.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":148,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module cs2113\";","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QN_MODE_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":160,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":161,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode without start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeNoDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module /random\";","lastModifiedDate":"2023-10-27"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_START_DETAILS.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode with excessive arguments at the back","lastModifiedDate":"2023-10-27"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeWithDetailsWithQnModeTooManyArguments() {","lastModifiedDate":"2023-10-27"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all Mod2 /normal random\";","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.TOO_MANY_ARGUMENTS_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":181,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":182,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":183,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":184,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with excessive arguments at the back","lastModifiedDate":"2023-10-27"},{"lineNumber":186,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":187,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithDetailsWithQnModeTooManyArguments() {","lastModifiedDate":"2023-10-27"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module Mod2 /random normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":190,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.TOO_MANY_ARGUMENTS_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":192,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":193,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":194,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":195,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":196,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":197,"author":{"gitId":"spinoandraptos"},"content":" @Nested","lastModifiedDate":"2023-10-27"},{"lineNumber":198,"author":{"gitId":"spinoandraptos"},"content":" public class InitialisedQnListWithoutErrorBlock {","lastModifiedDate":"2023-10-27"},{"lineNumber":199,"author":{"gitId":"spinoandraptos"},"content":" MockUi mockUi;","lastModifiedDate":"2023-10-27"},{"lineNumber":200,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":201,"author":{"gitId":"spinoandraptos"},"content":" public void setQuestionList(@TempDir Path tempDir) {","lastModifiedDate":"2023-10-27"},{"lineNumber":202,"author":{"gitId":"spinoandraptos"},"content":" // Create a temporary file in the tempDir","lastModifiedDate":"2023-10-27"},{"lineNumber":203,"author":{"gitId":"spinoandraptos"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-27"},{"lineNumber":204,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString()); // Pass the temporary file path","lastModifiedDate":"2023-10-27"},{"lineNumber":205,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-27"},{"lineNumber":206,"author":{"gitId":"spinoandraptos"},"content":" mockUi \u003d new MockUi(questionList, mockStorage);","lastModifiedDate":"2023-10-27"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d {\"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":208,"author":{"gitId":"spinoandraptos"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":209,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"spinoandraptos"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\"};","lastModifiedDate":"2023-10-27"},{"lineNumber":211,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-27"},{"lineNumber":212,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":213,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":214,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":215,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":216,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode without start details with question mode random","lastModifiedDate":"2023-10-27"},{"lineNumber":217,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":218,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":219,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeNoDetailsWithRandomQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":220,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer1\");","lastModifiedDate":"2023-10-27"},{"lineNumber":221,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer2\");","lastModifiedDate":"2023-10-27"},{"lineNumber":222,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer3\");","lastModifiedDate":"2023-10-27"},{"lineNumber":223,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer4\");","lastModifiedDate":"2023-10-27"},{"lineNumber":224,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":225,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":226,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":227,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 4/4\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":228,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":229,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":230,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":231,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode with start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":232,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":233,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":234,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeWithDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":235,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer1\");","lastModifiedDate":"2023-10-27"},{"lineNumber":236,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer8\");","lastModifiedDate":"2023-10-27"},{"lineNumber":237,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer3\");","lastModifiedDate":"2023-10-27"},{"lineNumber":238,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer2\");","lastModifiedDate":"2023-10-27"},{"lineNumber":239,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all details /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":240,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":241,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 2/4\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":243,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":244,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":245,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":247,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":248,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":249,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer1\");","lastModifiedDate":"2023-10-27"},{"lineNumber":250,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module Mod3 /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":251,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":252,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":253,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 0/1\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":254,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":255,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":256,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":257,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with multiple start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":258,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":259,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":260,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithMultipleDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":261,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer3\");","lastModifiedDate":"2023-10-27"},{"lineNumber":262,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer4\");","lastModifiedDate":"2023-10-27"},{"lineNumber":263,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer2\");","lastModifiedDate":"2023-10-27"},{"lineNumber":264,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module Mod3 Mod1 Mod2 /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":265,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":266,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":267,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 2/3\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":268,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":269,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":270,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":271,"author":{"gitId":"yeo-menghan"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spinoandraptos":223,"yeo-menghan":48}},{"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":"lisizhuang-0121"},"content":"import quizhub.command.CommandDelete;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.CommandInvalid;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":"class ParserTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" private Parser parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"James-Hong-Jey"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" public void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" }","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"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" * Test command parser with empty commands (invalid commands)","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_emptyCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] emptyInputs \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" final String resultMessage \u003d Ui.INVALID_COMMAND_MSG + System.lineSeparator() + Ui.INVALID_COMMAND_FEEDBACK;","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_invalidIntegerCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] invalidIntegers \u003d {","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete system32\",","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete 1111111111111111111111111111111111111111111111111\"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" final String resultMessage \u003d Ui.INVALID_INTEGER_INDEX_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" System.lineSeparator() + CommandDelete.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, invalidIntegers);","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" /*","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"James-Hong-Jey"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" void test_parseCommand_commandShortAnswer() {","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"James-Hong-Jey"},"content":" final String validInput \u003d \"short What\u0027s 9 + 10 / 21\";","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"James-Hong-Jey"},"content":" CommandShortAnswer result \u003d parseAndAssertCommandType(validInput, CommandShortAnswer.class);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" assertEquals(\"short What\u0027s 9 + 10 / 21\", result.getUserInput());","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"lisizhuang-0121"},"content":" * Test list of INVALID inputs and validate their feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"lisizhuang-0121"},"content":" * @param feedback The target feedback message for invalid command","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"lisizhuang-0121"},"content":" * @param inputs The invalid inputs that would generate the same feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseAndAssertIncorrectWithMessage(String feedback, String[] inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" final CommandInvalid result \u003d parseAndAssertCommandType(input, CommandInvalid.class);","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(feedback, result.feedback);","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" * Parses and tests the command type returned","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":" * @param input The command input to be tested","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":" * @param expectedClass The expected command class","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" private \u003cT extends Command\u003e T parseAndAssertCommandType(String input, Class\u003cT\u003e expectedClass) {","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" final Command result \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":" assertTrue(result.getClass().isAssignableFrom(expectedClass));","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" return (T) result;","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"spinoandraptos":8,"James-Hong-Jey":10,"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":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":" boolean showMessage \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" QuestionList qns \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" qns.addShortAnswerQn(\"Question\", \"Answer\",","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" \"Mod1\", Question.QnDifficulty.NORMAL, true);","lastModifiedDate":"2023-10-26"},{"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":6,"James-Hong-Jey":31,"lisizhuang-0121":2}},{"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}},{"path":"src/test/java/quizhub/ui/MockUi.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Queue;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class MockUi extends Ui {","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" private final Queue\u003cString\u003e userInputQueue \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private String lastDisplayedMessage;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" public MockUi(QuestionList tasks, MockStorage mockStorage) {","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" super(mockStorage, tasks);","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public void setUserInput(String input) {","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" userInputQueue.add(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" if (userInputQueue.isEmpty()) {","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" throw new RuntimeException(\"No more user inputs provided.\");","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" return userInputQueue.poll();","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" lastDisplayedMessage \u003d message;","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" public String getLastDisplayedMessage() {","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" return lastDisplayedMessage;","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"spinoandraptos":35}}] +[{"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":"spinoandraptos"},"content":" testImplementation \u0027junit:junit:4.13.1\u0027","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" mainClass.set(\"Quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" archiveBaseName.set(\"quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"spinoandraptos":3,"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":"lisizhuang-0121"},"content":"## Table of Contents","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"* [Acknowledgements](#acknowledgements)","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"* [Design and Implementation](#design--implementation)","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":" * [Application Lifecycle](#application-lifecycle)","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"StevenGX12"},"content":" * [Parser Component](#parser-component)","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":" * [Command Component](#command-components)","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":" * [Storage Component](#storage-component)","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":" * [UI Component](#ui-component)","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"* [Product Scope](#product-scope)","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"* [Non Functional Requirements](#non-functional-requirements)","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"* [Glossary](#glossary)","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"* [Instructions for Manual Testing](#instructions-for-manual-testing)","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":"1. For the main structure of the program, we have adapted the project structure","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"from the Individual Project of Man Juncheng at [Link](https://github.com/spinoandraptos/ip/tree/master) \u003c/li\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"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":21,"author":{"gitId":"lisizhuang-0121"},"content":"codes at [Link](https://github.com/se-edu/addressbook-level2)\u003c/li\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":"3. For the developer\u0027s guide, we have referenced the developer\u0027s guide from AddressBook","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":"level-3 [Link](https://se-education.org/addressbook-level3/DeveloperGuide.html)","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":"# Design \u0026 implementation","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"## Overall Architecture","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":"The main execution of the QuizHub application will concern 4 components which","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":"are the QuizHub, Ui, Parser and Command packages.","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":"![](./UML/architecture.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":"`Quizhub` is the \"main\" class, which is responsible for starting the program,","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"James-Hong-Jey"},"content":"initialising all other objects, executing commands, and shutting down.","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":"`UI` is the component that interacts with the user, taking inputs and displaying","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":"the results of the executed commands.","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"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":40,"author":{"gitId":"James-Hong-Jey"},"content":"it has, based on the user input.","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":"`Commands` refer to a package of individual commands with complex and specific","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":"logic, which is later executed in Quizhub and displayed by `UI`.","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"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":46,"author":{"gitId":"James-Hong-Jey"},"content":"refer to any miscellaneous utility classes used by all the components.","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":"## Application Lifecycle","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":"![](./UML/lifecycle.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"The program begins with the `run()` call to `QuizHub` class.","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":"This starts a loop in which","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":"user input is continuously read in from CLI for the user command to be extracted and executed.","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":"In each iteration of the loop, `QuizHub` makes a call to `Ui.getUserInput()` and returns the","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":"entire user input as a String object. Following which, `QuizHub` makes a call to","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":"`Parser.parseCommand()` to extract the user command from the String object and returns a","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":"`Command` object. Finally, `QuizHub` makes a call to `Command.executeCommand()` and performs","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":"the requested task.","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":"If `Command` is of Exit type, the loop will exit, and the program terminates.","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":"## Parser Component","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":"The `Parser` component is the backbone behind the program, functioning as the API","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":"between the CLI user interface and the core functionalities of the program. It supports","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":"the direct communication between the program and user by converting user input into `Command`","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":"objects which can be interpreted by the program.","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":"### Design Considerations","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":"As the `Parser` functions as the API between user and program, it must be designed with a clear","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":"consideration of both human and machine requirements.","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":"Our target users are NUS students preparing for exams who wish to use our program to facilitate","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":"their practice. Considering that time is of the essence for revising students, the `Parser` must","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":"prioritise efficiency of use to not cause time delays to users\u0027 revision. With this in mind,","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":"we based our design off the following points for inputs taken in by the `Parser`.","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":"1. **Ease of use**: Simple and short command structure \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":"2. **Ease of familiarisation**: No excessive or complicated commands","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":"Consideration must also be given to the developers and machine executing the code. The exact","lastModifiedDate":"2023-10-24"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":"mechanism behind the `Parser` must be able to effectively extract the relevant information from","lastModifiedDate":"2023-10-24"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":"user inputs in a non-arbitrary way to be used by other classes. Hence, we also need to strike a balance with the","lastModifiedDate":"2023-10-24"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":"following point for inputs taken in by the `Parser`.","lastModifiedDate":"2023-10-24"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":"1. **Ease of processing and validation**: Hierarchical command structure","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":"### Alternative Design Considerations","lastModifiedDate":"2023-10-24"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":"In designing the `Parser`, an alternative design we considered is to follow that of `Unix`","lastModifiedDate":"2023-10-24"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":"command interface. The `Unix` parser is designed such that input commands are required to","lastModifiedDate":"2023-10-24"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":"have the syntax of ```command -(options) argument1 argument2 ...``` where the order of arguments","lastModifiedDate":"2023-10-24"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":"does not matter. While this is a clean and neat parser design, we have decided not to adopt this","lastModifiedDate":"2023-10-24"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":"design as we see a strong need of having a hierarchical command structure for our program.","lastModifiedDate":"2023-10-24"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":"1. A hierarchical structure introduces logical sequence and flow to the command used,","lastModifiedDate":"2023-10-24"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" facilitating a quick familiarisation process for users to quickly learn the command syntax.","lastModifiedDate":"2023-10-24"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" This is in line with our design consideration to minimise learning and familiarisation time","lastModifiedDate":"2023-10-24"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" for users. This is in addition to the ease of processing and validation of commands.","lastModifiedDate":"2023-10-24"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" ```short [question]/[answer]/[module]/[difficulty]```, for one, is a command that has a","lastModifiedDate":"2023-10-24"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" logical sequence to which the details of a question is entered. It is more intuitive to","lastModifiedDate":"2023-10-24"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" follow a structure instead of entering such details without a fixed order, which can easily","lastModifiedDate":"2023-10-24"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" lead to confusion. \u003cbr\u003e\u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":"2. The use of the delimiter `/` also better helps to introduce the concept of hierarchy than the","lastModifiedDate":"2023-10-24"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" delimiter `--` used in `Unix` commands as `/` can be more easily associated with layering and","lastModifiedDate":"2023-10-24"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" stacking, which create structures possessing hierarchy.","lastModifiedDate":"2023-10-24"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":"### Parser Command Syntax","lastModifiedDate":"2023-10-24"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":"Our final design seeks to optimise both user experience and program effectiveness.","lastModifiedDate":"2023-10-24"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":"We have hence chosen the following general syntax for commands to be input into the `Parser`.","lastModifiedDate":"2023-10-24"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":"All commands require a starting payload, but some commands do not require the subsequent arguments.","lastModifiedDate":"2023-10-24"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":"commandType [payload] [/argument1 [payload1] /argument2 [payload2] ... ]","lastModifiedDate":"2023-10-24"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":"```","lastModifiedDate":"2023-10-24"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":"The command structure is simple, short, and intuitive. With commands rarely requiring more","lastModifiedDate":"2023-10-24"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":"than 2 arguments, typing and inputting the command in CLI is fast and efficient, allowing","lastModifiedDate":"2023-10-24"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":"revising students to quickly utilise the program. The hierarchical and logical structure to","lastModifiedDate":"2023-10-24"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":"the arrangement of arguments and payloads allows students to quickly familiarise with the","lastModifiedDate":"2023-10-24"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":"syntax and minimise delays to their learning schedule.","lastModifiedDate":"2023-10-24"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":"The hierarchical structure also allows for the respective payload to be easily extracted","lastModifiedDate":"2023-10-24"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":"with little ambiguity. Command validation can then be performed sequentially, facilitating","lastModifiedDate":"2023-10-24"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":"efficient checks.","lastModifiedDate":"2023-10-24"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":"### Implementation","lastModifiedDate":"2023-10-24"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":"The main function of `Parser` is to decode user input and extract relevant information to be","lastModifiedDate":"2023-10-24"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":"used by other classes. Hence, it supports 3 main methods as listed below.","lastModifiedDate":"2023-10-24"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":"1. `parseCommand`","lastModifiedDate":"2023-10-24"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":"2. `getContentAfterKeyword`","lastModifiedDate":"2023-10-24"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":"3. `extractQuestionDifficulty`","lastModifiedDate":"2023-10-24"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":"`parseCommand`","lastModifiedDate":"2023-10-24"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":"This method processes raw user input from CLI to extract information to be assembled into a","lastModifiedDate":"2023-10-24"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":"`Command` object. It determines the type of command by reading the commandType from the","lastModifiedDate":"2023-10-24"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":"very start of the user input.","lastModifiedDate":"2023-10-24"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":"The following sequence diagram shows the implementation of `parseCommand`.","lastModifiedDate":"2023-10-24"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":"![](./UML/Parser.jpg)","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":"`getContentAfterKeyword`","lastModifiedDate":"2023-10-24"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":"This method acts as a helper method to assist in extracting the payload following an argument","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":"in the user input. It is used in the constructing of `Command` objects when command-specific","lastModifiedDate":"2023-10-24"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":"information need to be extracted from arguments in the user input.","lastModifiedDate":"2023-10-24"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"It simply breaks up an entire ```/argument [payload]``` String into ```/argument``` and","lastModifiedDate":"2023-10-24"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":"```[payload]``` and returns the `[payload]`. Hence, any String passed into this method must","lastModifiedDate":"2023-10-24"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":"take on the form of ```/argument [payload]``` or an exception will be thrown and handled by","lastModifiedDate":"2023-10-24"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":"printing an error message to the CLI.","lastModifiedDate":"2023-10-24"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":"`extractQuestionDifficulty`","lastModifiedDate":"2023-10-24"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":"This method acts as a helper method for extracting an `QnDifficulty` enum type from a user","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":"text input. This is used for setting question difficulty during the construction of a","lastModifiedDate":"2023-10-24"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":"`Question` , or the execution of a `CommandMarkDifficulty`.","lastModifiedDate":"2023-10-24"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":"If the string passed to this method does not describe an existing question difficulty level, an","lastModifiedDate":"2023-10-24"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":"exception will be thrown and handled by printing an error message to the CLI.","lastModifiedDate":"2023-10-24"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":168,"author":{"gitId":"yeo-menghan"},"content":"## Command Components","lastModifiedDate":"2023-10-24"},{"lineNumber":169,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":170,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":171,"author":{"gitId":"yeo-menghan"},"content":"### Start Command - Start Quiz","lastModifiedDate":"2023-10-24"},{"lineNumber":172,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":173,"author":{"gitId":"yeo-menghan"},"content":"The start quiz feature allows users to start quizzing themselves with customizable characters to define which modules to quiz themselves on alongside whether to randomize the questions or use their pre-defined question order.","lastModifiedDate":"2023-10-24"},{"lineNumber":174,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":175,"author":{"gitId":"yeo-menghan"},"content":"![](./UML/CommandStart_Sequence.jpg)","lastModifiedDate":"2023-10-24"},{"lineNumber":176,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":177,"author":{"gitId":"yeo-menghan"},"content":"The start quiz mechanism is facilitated by CommandStart under package quizhub.command. The class utilises methods from `quizhub.questionlist.QuestionList`. It extends Command with 2 new prompts (`/[quiz mode]` and `/[qn mode]`) and 1 user input field (`/[start details]`). It implements the following operations:","lastModifiedDate":"2023-10-24"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":179,"author":{"gitId":"yeo-menghan"},"content":"`/[quiz mode]`","lastModifiedDate":"2023-10-24"},{"lineNumber":180,"author":{"gitId":"yeo-menghan"},"content":"1. 2 configurations - `/module` and `/all`","lastModifiedDate":"2023-10-24"},{"lineNumber":181,"author":{"gitId":"yeo-menghan"},"content":"2.\t`/module` must be followed by a category name to retrieve questions from that specific category","lastModifiedDate":"2023-10-24"},{"lineNumber":182,"author":{"gitId":"yeo-menghan"},"content":"- The method categoriseListByModules from the package `quizhub.questionlist.QuestionList` will be called to retrieve the questions by that are listed within the specified category from the storage list","lastModifiedDate":"2023-10-24"},{"lineNumber":183,"author":{"gitId":"yeo-menghan"},"content":"- `/all` will not require any input from `/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":184,"author":{"gitId":"yeo-menghan"},"content":"3.\tThe method `getAllQns()` from package `quizhub.questionlist.QuestionList` will be called to retrieve all questions from the storage list.","lastModifiedDate":"2023-10-24"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":186,"author":{"gitId":"yeo-menghan"},"content":"`/[qn mode]`","lastModifiedDate":"2023-10-24"},{"lineNumber":187,"author":{"gitId":"yeo-menghan"},"content":"1.\t2 configurations - `/random` and `/normal`","lastModifiedDate":"2023-10-24"},{"lineNumber":188,"author":{"gitId":"yeo-menghan"},"content":"2.\tThis prompt is activated after defining `/[quiz mode]` and `/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":189,"author":{"gitId":"yeo-menghan"},"content":"3.\t/random will randomize the list of questions using `java.util.Collections.shuffle` and store it within a temporary array to prevent tempering with the original array in Storage","lastModifiedDate":"2023-10-24"},{"lineNumber":190,"author":{"gitId":"yeo-menghan"},"content":"4.\t`/normal` will not require any further actions, using the previously generated list as specified by `/[quiz mode]` and `/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":192,"author":{"gitId":"yeo-menghan"},"content":"`/[start details]`","lastModifiedDate":"2023-10-24"},{"lineNumber":193,"author":{"gitId":"yeo-menghan"},"content":"1.\tDefine the category of `/module` i.e. `/module` number to call upon the “number” tagged modules when starting the quiz","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"yeo-menghan"},"content":"2.\tThis field can be left blank when `/all` is called for `/[quiz mode]` to tell the program to quiz the user on all questions stored within the local storage","lastModifiedDate":"2023-10-24"},{"lineNumber":195,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":196,"author":{"gitId":"yeo-menghan"},"content":"Thereafter the quiz is started by calling the method `startQuiz()` in package `quizhub.questionlist.QuestionList`. Within `startQuiz()`, the program iterates through the list of totalQuestions while blocking out the answers. The user can input their answer in the input field which is utilized to match with the actual answer to provide “correct” or “wrong”. Each correct answer will increment correctAnswers variable by 1. The quiz ends when all the questions are displayed and the total number of correctAnswers will be displayed.","lastModifiedDate":"2023-10-24"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":198,"author":{"gitId":"James-Hong-Jey"},"content":"### Short Command - Add Short Answer Question to the Quiz","lastModifiedDate":"2023-10-24"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":200,"author":{"gitId":"James-Hong-Jey"},"content":"One of the supported question formats is the Short Answer Question, in which a question","lastModifiedDate":"2023-10-24"},{"lineNumber":201,"author":{"gitId":"James-Hong-Jey"},"content":"can be answered with a phrase of a few words, which will be matched to a corresponding answer","lastModifiedDate":"2023-10-24"},{"lineNumber":202,"author":{"gitId":"James-Hong-Jey"},"content":"of sufficient similarity.","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":204,"author":{"gitId":"James-Hong-Jey"},"content":"It is parsed as: `short [question]/[answer]/[module]/[difficulty]`","lastModifiedDate":"2023-10-24"},{"lineNumber":205,"author":{"gitId":"James-Hong-Jey"},"content":"1. `[question]` is the question, phrased as asking the user (i.e. What is 2 + 2? )","lastModifiedDate":"2023-10-24"},{"lineNumber":206,"author":{"gitId":"James-Hong-Jey"},"content":"2. `[answer]` is the answer or possible answer(s) that the user must","lastModifiedDate":"2023-10-24"},{"lineNumber":207,"author":{"gitId":"James-Hong-Jey"},"content":" input to count as correct. It is case-insensitive. (i.e. 4, four)","lastModifiedDate":"2023-10-24"},{"lineNumber":208,"author":{"gitId":"James-Hong-Jey"},"content":"3. `[module]` is the module that the question belongs in (i.e. CS2113)","lastModifiedDate":"2023-10-24"},{"lineNumber":209,"author":{"gitId":"James-Hong-Jey"},"content":"4. `[difficulty]` is the difficulty of the question for sorting later (i.e. Hard)","lastModifiedDate":"2023-10-24"},{"lineNumber":210,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":211,"author":{"gitId":"James-Hong-Jey"},"content":"*Condensed Class Diagram - Does not contain all attributes \u0026 methods","lastModifiedDate":"2023-10-25"},{"lineNumber":212,"author":{"gitId":"James-Hong-Jey"},"content":"![](./UML/AddShortCommand.jpg)","lastModifiedDate":"2023-10-25"},{"lineNumber":213,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":214,"author":{"gitId":"James-Hong-Jey"},"content":"Thereafter, the command is returned to the Quizhub component and executed,","lastModifiedDate":"2023-10-24"},{"lineNumber":215,"author":{"gitId":"James-Hong-Jey"},"content":"to add a Question object to the corresponding QuestionList object","lastModifiedDate":"2023-10-24"},{"lineNumber":216,"author":{"gitId":"James-Hong-Jey"},"content":"using the `addToQuestionList` method. This method will analyse the arguments above","lastModifiedDate":"2023-10-24"},{"lineNumber":217,"author":{"gitId":"James-Hong-Jey"},"content":"and add the Question to the appropriate list.","lastModifiedDate":"2023-10-24"},{"lineNumber":218,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":219,"author":{"gitId":"James-Hong-Jey"},"content":"### Find Command - Look for a matching question","lastModifiedDate":"2023-10-24"},{"lineNumber":220,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":221,"author":{"gitId":"James-Hong-Jey"},"content":"Quizhub supports searching for specific questions, by searching matching keywords","lastModifiedDate":"2023-10-24"},{"lineNumber":222,"author":{"gitId":"James-Hong-Jey"},"content":"in the format","lastModifiedDate":"2023-10-24"},{"lineNumber":223,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":224,"author":{"gitId":"James-Hong-Jey"},"content":"`find /[description]` OR `find /[module]`","lastModifiedDate":"2023-10-24"},{"lineNumber":225,"author":{"gitId":"James-Hong-Jey"},"content":"i.e. `find /CS2113`, `find /water buffalo`","lastModifiedDate":"2023-10-24"},{"lineNumber":226,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":227,"author":{"gitId":"James-Hong-Jey"},"content":"This command is passed to the corresponding QuestionList where the `searchList` method","lastModifiedDate":"2023-10-24"},{"lineNumber":228,"author":{"gitId":"James-Hong-Jey"},"content":"is called, which will create a new ArrayList of questions that contain the (case-insensitive)","lastModifiedDate":"2023-10-24"},{"lineNumber":229,"author":{"gitId":"James-Hong-Jey"},"content":"keyword and subsequently print them.","lastModifiedDate":"2023-10-24"},{"lineNumber":230,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":231,"author":{"gitId":"StevenGX12"},"content":"## Storage Component","lastModifiedDate":"2023-10-24"},{"lineNumber":232,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":233,"author":{"gitId":"StevenGX12"},"content":"The Storage class is a critical component of the QuizHub application, responsible for managing the storage, retrieval, and updating of question data. It represents a hard disk storage system for storing, reading, and updating question data. It interacts with question data in a file specified by the user and integrates with the `QuestionList` class for effective storage and retrieval of questions.","lastModifiedDate":"2023-10-24"},{"lineNumber":234,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":235,"author":{"gitId":"StevenGX12"},"content":"Developers need to be aware of the two main methods for loading and updating data:","lastModifiedDate":"2023-10-24"},{"lineNumber":236,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":237,"author":{"gitId":"StevenGX12"},"content":"- `public void loadData(QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":238,"author":{"gitId":"StevenGX12"},"content":"- `public void updateData(QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":239,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":240,"author":{"gitId":"StevenGX12"},"content":"The details of the data loading and updating process are explained in details below.","lastModifiedDate":"2023-10-24"},{"lineNumber":241,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":242,"author":{"gitId":"StevenGX12"},"content":"### Constructor","lastModifiedDate":"2023-10-24"},{"lineNumber":243,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":244,"author":{"gitId":"StevenGX12"},"content":"#### `public Storage(String filePath)`","lastModifiedDate":"2023-10-24"},{"lineNumber":245,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":246,"author":{"gitId":"StevenGX12"},"content":"- **Parameters:**","lastModifiedDate":"2023-10-24"},{"lineNumber":247,"author":{"gitId":"StevenGX12"},"content":" - `filePath`: The path to the file where question data is stored and read from.","lastModifiedDate":"2023-10-24"},{"lineNumber":248,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":249,"author":{"gitId":"StevenGX12"},"content":"### Loading data","lastModifiedDate":"2023-10-24"},{"lineNumber":250,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":251,"author":{"gitId":"StevenGX12"},"content":"The process of loading data from the storage file specified in the constructor takes places in a few steps. To illustrate the overall flow on loading data, refer to the sequence diagram below.","lastModifiedDate":"2023-10-24"},{"lineNumber":252,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":253,"author":{"gitId":"StevenGX12"},"content":"![](./UML/Storage.jpg)","lastModifiedDate":"2023-10-24"},{"lineNumber":254,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":255,"author":{"gitId":"StevenGX12"},"content":":exclamation: This sequence diagram emphasizes the process of loading data into storage, and has therefore omitted details of more trivial and/or non-related methods as well as exception handling logic. To find out more about the details, please refer to the complete code and header comments.","lastModifiedDate":"2023-10-24"},{"lineNumber":256,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":257,"author":{"gitId":"StevenGX12"},"content":"In addition to the main `loadData` method, the process involves the following 3 helper methods:","lastModifiedDate":"2023-10-24"},{"lineNumber":258,"author":{"gitId":"StevenGX12"},"content":"- `private void addQuestionFromFile(QuestionList questions, String currentQuestion, int questionIndex, String questionType, String questionDescription, String questionDoneStatus, String questionDifficulty, String questionModule)`","lastModifiedDate":"2023-10-24"},{"lineNumber":259,"author":{"gitId":"StevenGX12"},"content":"- `private void parseQuestionsFromStrings(ArrayList\u003cString\u003e rawQuestions, QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":260,"author":{"gitId":"StevenGX12"},"content":"- `public void buildCurrentListFromFile(QuestionList questions)`","lastModifiedDate":"2023-10-24"},{"lineNumber":261,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":262,"author":{"gitId":"StevenGX12"},"content":"The general idea is that when the program is first initiated, the `loadData` method is called from within the `Ui` class, which passes in an empty `QuestionList`. Within the method itself, the helper method `buildCurrentListFromFile()` will take in this empty `QuestionList` object and populate it with `question` objects according to textual information stored within the specified file. This is done by first extracting each question stored line by line into a new `Arraylist\u003cString\u003e rawQuestions`, then calling another helper method `parseQuestionsFromStrings()` to add each question into the `QuestionList` via a third helper method `addQuestionFromFileaddQuestionFromFile`.","lastModifiedDate":"2023-10-24"},{"lineNumber":263,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":264,"author":{"gitId":"spinoandraptos"},"content":"The process is refactored into these methods to avoid deep nesting of code to achieve clearer logical flow and more readability and easier debugging process.","lastModifiedDate":"2023-10-28"},{"lineNumber":265,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":266,"author":{"gitId":"StevenGX12"},"content":"### Updating data","lastModifiedDate":"2023-10-24"},{"lineNumber":267,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":268,"author":{"gitId":"StevenGX12"},"content":"The process of updating data is done in a similar fashion compared to that of loading data, but in the reverse order logically.","lastModifiedDate":"2023-10-24"},{"lineNumber":269,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":270,"author":{"gitId":"StevenGX12"},"content":"Apart from the main `updateData` method, it involves the use of 2 other helper methods:","lastModifiedDate":"2023-10-24"},{"lineNumber":271,"author":{"gitId":"StevenGX12"},"content":"- `private void writeToFile(String filePath, String textToAdd, boolean toAppend)`","lastModifiedDate":"2023-10-24"},{"lineNumber":272,"author":{"gitId":"StevenGX12"},"content":"- `private void storeQuestionToFile(Question question)`","lastModifiedDate":"2023-10-24"},{"lineNumber":273,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":274,"author":{"gitId":"StevenGX12"},"content":"Upon exiting the program, the `Ui` class will call the `updateData` method and passing in the current `QuestionList` of the program. Within the method, the `writeToFile` helper method is first called to determine whether texts are to replace existing content of the file or to be appended at the back. Then, each question is stored in the appropriate format into the destination file using the method `storeQuestionToFile` which parses a `Question` object into the correct string format for storage.","lastModifiedDate":"2023-10-24"},{"lineNumber":275,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":276,"author":{"gitId":"StevenGX12"},"content":"## UI Component","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"StevenGX12"},"content":"The UI class in the Quizhub application is responsible for handling the user interface interactions in a command-line interface (CLI). It provides methods for displaying messages or questions as well as getting user","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"StevenGX12"},"content":"input.","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":281,"author":{"gitId":"StevenGX12"},"content":"### Constructor","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"StevenGX12"},"content":"#### `public Ui(Storage dataStorage, QuestionList tasks)`","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"StevenGX12"},"content":"- **Parameters:**","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"StevenGX12"},"content":" - `dataStorage`: An instance of the `Storage` class, which handles the storage of quiz data on the hard disk.","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"StevenGX12"},"content":" - `tasks`: An instance of the `QuestionList` class, which represents a record of all questions documented in the application.","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"StevenGX12"},"content":"### Implementation Details","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"StevenGX12"},"content":"#### Overall Flow","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"StevenGX12"},"content":"![](./UML/ui_flow.jpg)","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"StevenGX12"},"content":"When the program is first initiated, the `displayOpeningMessage()` method is called to display a welcome message while also calling the `loadData()` method of the `dataStorage` to display all the questions stored in the storage file if any.","lastModifiedDate":"2023-10-26"},{"lineNumber":296,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"spinoandraptos"},"content":"Afterward, in the main loop of the program execution, the `getUserInput()` method is called at the start of the loop to capture user input as a `String` object, which is then used by the `Parser` and various `Command` classes to parse and execute the appropriate commands. This process is terminated only upon execution of a `CommandExit`.","lastModifiedDate":"2023-10-28"},{"lineNumber":298,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":299,"author":{"gitId":"StevenGX12"},"content":"Finally, the `displayClosingMessage()` method is called to display a farewell message while also calling the `updateData()` method of the `dataStorage` to update the data stored in the storage file with the latest ones.","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"StevenGX12"},"content":"#### Displaying Quizzes","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"StevenGX12"},"content":"![](./UML/ui_quiz.jpg)","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"StevenGX12"},"content":"The `Ui` class also has a `displayQuestion(Question question, int currentQuestionIndex, int totalQuestions)` method, which is used to render a question from the list of stored questions in the specific format and prompt the user for an answer when a `CommandStart` is executed to signal the start of a quiz. This method will be called in a loop for each question until the end of the list of questions.","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"spinoandraptos"},"content":"# Product scope","lastModifiedDate":"2023-10-24"},{"lineNumber":308,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":309,"author":{"gitId":"spinoandraptos"},"content":"## Our Product","lastModifiedDate":"2023-10-24"},{"lineNumber":310,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub","lastModifiedDate":"2023-10-21"},{"lineNumber":311,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":312,"author":{"gitId":"spinoandraptos"},"content":"## Target user profile","lastModifiedDate":"2023-10-24"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":314,"author":{"gitId":"lisizhuang-0121"},"content":"Our target users are","lastModifiedDate":"2023-10-21"},{"lineNumber":315,"author":{"gitId":"lisizhuang-0121"},"content":"* NUS Students preparing for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":316,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to take notes in class","lastModifiedDate":"2023-10-21"},{"lineNumber":317,"author":{"gitId":"lisizhuang-0121"},"content":"* Fear to miss out of important knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":318,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to test their understanding of knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":319,"author":{"gitId":"lisizhuang-0121"},"content":"* Want to be better prepared for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":320,"author":{"gitId":"lisizhuang-0121"},"content":"* Majoring in computing or engineering where there are lots of exams","lastModifiedDate":"2023-10-21"},{"lineNumber":321,"author":{"gitId":"lisizhuang-0121"},"content":"* Coders and tech geeks who enjoy using the CLI interface","lastModifiedDate":"2023-10-21"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":323,"author":{"gitId":"spinoandraptos"},"content":"## Value proposition","lastModifiedDate":"2023-10-24"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":325,"author":{"gitId":"lisizhuang-0121"},"content":"Allow NUS Students to easily take notes in class and allow them to","lastModifiedDate":"2023-10-21"},{"lineNumber":326,"author":{"gitId":"lisizhuang-0121"},"content":"generate quizzes to test their knowledge of understanding. By using the","lastModifiedDate":"2023-10-21"},{"lineNumber":327,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub application, students can input notes taken in class in a question form,","lastModifiedDate":"2023-10-21"},{"lineNumber":328,"author":{"gitId":"lisizhuang-0121"},"content":"which they could use to take quizzes to ensure their understanding of the topic.","lastModifiedDate":"2023-10-21"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":330,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":332,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":333,"author":{"gitId":"lisizhuang-0121"},"content":"|:-------:|:-------------------------------------:|:---------------------------------------------------------------------------------:|:-------------------------------------------------------------------------:|","lastModifiedDate":"2023-10-21"},{"lineNumber":334,"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":335,"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":336,"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":337,"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":338,"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":339,"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":340,"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":341,"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":342,"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":343,"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":344,"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":345,"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":346,"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":347,"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":348,"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":349,"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":350,"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":351,"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":352,"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":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":354,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":355,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":356,"author":{"gitId":"spinoandraptos"},"content":"1. Program should work on any typical OS as long as it has Java 11 installed and configured.","lastModifiedDate":"2023-10-28"},{"lineNumber":357,"author":{"gitId":"spinoandraptos"},"content":"2. A user with average or above typing speed for regular English text (not program code) in the CLI should not ","lastModifiedDate":"2023-10-29"},{"lineNumber":358,"author":{"gitId":"spinoandraptos"},"content":"experience any significant delays to their revision as compared to using a GUI program.","lastModifiedDate":"2023-10-29"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":360,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":362,"author":{"gitId":"spinoandraptos"},"content":"1. **Typical OS**: Windows, Linux, Unix, macOS.","lastModifiedDate":"2023-10-28"},{"lineNumber":363,"author":{"gitId":"spinoandraptos"},"content":"2. **CommandType**: The first word input in the CLI, indicates the type of instruction the program should execute.","lastModifiedDate":"2023-10-28"},{"lineNumber":364,"author":{"gitId":"spinoandraptos"},"content":"`e.g. start, delete, short`","lastModifiedDate":"2023-10-28"},{"lineNumber":365,"author":{"gitId":"spinoandraptos"},"content":"3. **Argument**: A parameter word identified by a leading `/`, arguments indicate the start of information","lastModifiedDate":"2023-10-28"},{"lineNumber":366,"author":{"gitId":"spinoandraptos"},"content":"to be extracted from a command in addition to the command type.","lastModifiedDate":"2023-10-28"},{"lineNumber":367,"author":{"gitId":"spinoandraptos"},"content":"4. **Payload**: A sequence of additional information immediately following the command type or arguments, they","lastModifiedDate":"2023-10-28"},{"lineNumber":368,"author":{"gitId":"spinoandraptos"},"content":"provide information for executing complex instructions.","lastModifiedDate":"2023-10-28"},{"lineNumber":369,"author":{"gitId":"spinoandraptos"},"content":"5. **Hierarchical**: Possesses logical sequencing or order, such as in order of decreasing subsets or importance.","lastModifiedDate":"2023-10-28"},{"lineNumber":370,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":371,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":373,"author":{"gitId":"spinoandraptos"},"content":"### Launch","lastModifiedDate":"2023-10-28"},{"lineNumber":374,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":375,"author":{"gitId":"spinoandraptos"},"content":"1. Ensure you have Java 11 or above installed in your Computer.","lastModifiedDate":"2023-10-28"},{"lineNumber":376,"author":{"gitId":"spinoandraptos"},"content":"2. Download the latest `tp_version_1.0.jar` from [here](https://github.com/AY2324S1-CS2113-W12-1/tp/releases/download/Version_1_0/tp_version_1.0.jar).","lastModifiedDate":"2023-10-28"},{"lineNumber":377,"author":{"gitId":"spinoandraptos"},"content":"3. Copy the file to the folder you want to use as the home folder for your QuizHub.","lastModifiedDate":"2023-10-28"},{"lineNumber":378,"author":{"gitId":"spinoandraptos"},"content":"4. Open a command terminal, cd into the folder you put the `tp_version_1.0.jar` file in, and use the java -jar ","lastModifiedDate":"2023-10-28"},{"lineNumber":379,"author":{"gitId":"spinoandraptos"},"content":"`tp_version_1.0.jar` command to run the application and launch the CLI.","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"spinoandraptos":144,"StevenGX12":78,"James-Hong-Jey":49,"yeo-menghan":25,"lisizhuang-0121":52,"-":31}},{"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":"yeo-menghan"},"content":"QuizHUB is a local desktop app designed to help NUS students easily record examinable questions and generate quizzes","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"from their very own question bank to test their understanding via a Command Line Interface (CLI). Easily launch-able","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"on the go, QuizHUB is a versatile tool that aims to streamline and optimize the revision experience for NUS students","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":"from all fields of study.","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"2. Down the latest version of `QuizHub` from [here](http://link.to/duke).","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":"1. Helper command","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"yeo-menghan"},"content":"2. Add question/answer and group them in modules/difficulty","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"yeo-menghan"},"content":"3. Stores the question/answer in local storage","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":"4. Delete question/answer","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":"5. Find question/answer via question\u0027s description or via module name","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":"6. Edit question/answer","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":"7. Mark question difficulty","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":"8. Start a quiz session, specifying category of questions and in random/normal mode","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":"9. Permanently shuffle questions order for added challenge!","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"### Getting help on using the app: `help`","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":"Assists new users in familiarising with the application. Provides a list of commands for the user to get started","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":"with the essentials.","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"yeo-menghan"},"content":"Format: `help`","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"yeo-menghan"},"content":"* **Command**:`help` \u003cbr\u003e","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":"`Here are the list of commands you can use:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":"`1. help - shows the list of commands you can use,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":"`2. short [question]/[answer]/[module]/[difficulty] - adds a short answer question and its answer to the list,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":"`3. list - shows the list of questions and answers,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":"`4. delete [question number] - deletes the question and answer at the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":"`5. find /[description] - displays all questions that contains the specified description,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":"`6. find /[module] - displays all questions that belong to the specified module,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":"`7. edit [question number] /description [description] - edits the description of the question with the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":"`8. edit [question number] /answer [answer] - edits the answer to the question with the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":"`9. start /[quiz mode] [start details] /[qn mode] - starts the quiz with option for /module or /all and /random or /normal,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":"`10. shuffle - shuffle quiz questions to a random order,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":"`11. markdiff [question number] [question difficulty] - sets the difficulty of question with the specified number,` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":"`12. bye - exits the program` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":"Notes:","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":"* Ver 2.0 will only list commands. Future versions will include auto-filling and scrolling","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"yeo-menghan"},"content":" (multiple pages of the help menu)","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":"### Adding short-answer questions and their answers: `short`","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":"Adds a new short question and its answer to the question and answer bank along with the assigned module and","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":"difficulty level.","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":"Format: `short [question]/[answer]/[module]/[difficulty]`","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"yeo-menghan"},"content":"Example of usage:","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `add What is the value of Pi to 2 decimal places?/3.14/math/math` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" `I have added the following question OwO:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" `[S] What is the value of Pi to 2 decimal places? / 3.14 | math | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `add What fish is Nemo based off?/a Clownfish/trivia/easy` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" `I have added the following question OwO:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" `[S][] What fish is Nemo based off? / a Clownfish | trivia | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e ","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":"Notes:","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"yeo-menghan"},"content":"* If either the question or answer is left blank, the app will prompt you to re-enter the question-answer set,","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"yeo-menghan"},"content":" the app does not support blank questions/answers","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":"### List Questions `list`","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":"List all the questions from the question and answer bank in the storage.","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":"Format: `list`","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":"Examples of usage:","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `list` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":83,"author":{"gitId":"yeo-menghan"},"content":" **Output**:\u003cbr\u003e","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" 1: `[S][] 2 / 4 | num | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" 2: `[S][] hi / hihi | word | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" 3: `[S][] 6 / 12 | num | EASY` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":87,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"yeo-menghan"},"content":"### Delete Questions `delete`","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":"Deletes the question with the specified question number from the question and answer bank.","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":"`delete [qustion number]`","lastModifiedDate":"2023-10-29"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":"Example of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":"* **Command**: `delete 2` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" `Roger that! I have deleted the following question \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" `[s][] [question description] / [ansewer] | [module] | [quesiton difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":"Notes:","lastModifiedDate":"2023-10-29"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":"* The program only supports deleting one question at a time, so entering multiple question numbers will result in the program prompting you to enter only 1 question number.","lastModifiedDate":"2023-10-29"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":"* The program accepts only a valid integer question number within the range of the number of available questions, any other form of inputs will result in the program prompting you to re-enter a valid command.","lastModifiedDate":"2023-10-29"},{"lineNumber":104,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"yeo-menghan"},"content":"### Find question/answer `find`","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":"Finds and displays all questions in the question and answer bank that match the criteria (question description / answer) and keywords of the search.","lastModifiedDate":"2023-10-29"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":"Format:","lastModifiedDate":"2023-10-29"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":"1. `find /description [question description]`","lastModifiedDate":"2023-10-29"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":"2. `find /answer [answer]`","lastModifiedDate":"2023-10-29"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":"Examples of usage:","lastModifiedDate":"2023-10-29"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":"* **Command**: `find /description example description` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":" `Here are questions that matched your search:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":" `1: [S][] EXAMPLE Description / [answer] | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":117,"author":{"gitId":"StevenGX12"},"content":" `2: [S][] example description1 / [answer] | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" `3: [S][] example description 2/ [answer] | [module] | [question difficulty]` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":"* **Command**: `find /answer example answer` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":" `Here are questions that matched your search:` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" `1: [S][] [question description] / EXAMPLE Answer | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" `2: [S][] [question description] / example answer1 | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" `3: [S][] [question description] / example answer 2 | [module] | [question difficulty]` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":"Notes:","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":"* As long as the search keyword string is a substring of the question description / answer of a question stored in the question and answer bank, it will be included in the search result. Please refer to the above examples as an illustration of this property.","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":"* The search is non case-sensitive. Please refer to the above examples as an illustration of this property.","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":"### Edit question/answer `edit`","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":"Edits the description or answer of an existing question in the question and answer bank","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":"by referencing the number of the question in the existing question list in the question","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":"and answer bank.","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":"Format:","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":"1. `edit [question number] /description [newDescription]`","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":"2. `edit [question number] /answer [newAnswer]`","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":"Examples of usage:","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `edit 1 /description change description!!!` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have edited the following question \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" `[S][] change description!!! / [original answer] | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `edit 2 /answer different answer???` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have edited the following question \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" `[S][] [original description] / different answer??? | [module] | [question difficulty]` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" `Now you have [no. of questions] questions in the list! UWU` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-29"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":"Notes:","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":"* If either the question number is invalid, or no new description or answer is provided,","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" the app will prompt you to re-enter the edit command","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"* The app only supports changing either description or answer at a time, not both together","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"yeo-menghan"},"content":"### Start quiz `start`","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"yeo-menghan"},"content":"Starts a quiz which fetches the specified category from the question bank in normal / random order to be tested.","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":"The app will display the fetched questions one at a time on CLI and the user is required to enter answer through CLI.","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":"Upon every user answer entry, the app feedbacks if the user answered correctly, loads the next question and updates","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":"the score. When all questions are answered, the quiz terminates automatically and the final user quiz score is displayed.","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":162,"author":{"gitId":"yeo-menghan"},"content":"Format: `start /[quiz mode] [start details] /[qn mode]`","lastModifiedDate":"2023-10-27"},{"lineNumber":163,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"yeo-menghan"},"content":"Examples of usage:","lastModifiedDate":"2023-10-27"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /module num /normal` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions that pertains to module “num” in order defined in the list","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /module num /random` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions that pertains to module “num” but in a randomised order","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /all /random` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions directly from the list of questions in random order","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `start /all /normal` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" **Output**: starts the quiz - displays questions directly from the list of questions in the order of the list","lastModifiedDate":"2023-10-28"},{"lineNumber":173,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":174,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":175,"author":{"gitId":"yeo-menghan"},"content":"Notes:","lastModifiedDate":"2023-10-27"},{"lineNumber":176,"author":{"gitId":"yeo-menghan"},"content":"* If the specified module is not part of the list, an exception will be thrown and the user will be notified","lastModifiedDate":"2023-10-27"},{"lineNumber":177,"author":{"gitId":"yeo-menghan"},"content":" with a prompt to write the command in the specified format.","lastModifiedDate":"2023-10-27"},{"lineNumber":178,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"yeo-menghan"},"content":"### Shuffling Questions `shuffle`","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"yeo-menghan"},"content":"Shuffle questions within question list to a random order,","lastModifiedDate":"2023-10-27"},{"lineNumber":181,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":182,"author":{"gitId":"yeo-menghan"},"content":"Format: `shuffle`","lastModifiedDate":"2023-10-27"},{"lineNumber":183,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":184,"author":{"gitId":"yeo-menghan"},"content":"Notes","lastModifiedDate":"2023-10-27"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":"* Shuffle will not work if there are no questions within the question bank","lastModifiedDate":"2023-10-28"},{"lineNumber":186,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":187,"author":{"gitId":"yeo-menghan"},"content":"### Mark difficulty of questions `markdiff`","lastModifiedDate":"2023-10-27"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":"Changes the difficulty level of an existing question in the question and answer bank","lastModifiedDate":"2023-10-28"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":"by referencing the number of the question in the existing question list in the question","lastModifiedDate":"2023-10-28"},{"lineNumber":190,"author":{"gitId":"spinoandraptos"},"content":"and answer bank.","lastModifiedDate":"2023-10-28"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":192,"author":{"gitId":"spinoandraptos"},"content":"Format: `markdiff [question number] [question difficulty]`","lastModifiedDate":"2023-10-28"},{"lineNumber":193,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":194,"author":{"gitId":"spinoandraptos"},"content":"Examples of usage:","lastModifiedDate":"2023-10-28"},{"lineNumber":195,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `markdiff 1 easy` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":196,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":197,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have marked the following question as easy \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":198,"author":{"gitId":"spinoandraptos"},"content":" `[S][] [original description] / [original answer] | [module] | EASY` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":199,"author":{"gitId":"spinoandraptos"},"content":"* **Command**: `markdiff 2 Hard` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":200,"author":{"gitId":"spinoandraptos"},"content":" **Output**: \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":201,"author":{"gitId":"spinoandraptos"},"content":" `Roger that! I have marked the following question as hard \u003ew\u003c !` \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":202,"author":{"gitId":"spinoandraptos"},"content":" `[S][] [original description] / [original answer] | [module] | HARD` \u003cbr\u003e \u003cbr\u003e","lastModifiedDate":"2023-10-28"},{"lineNumber":203,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":204,"author":{"gitId":"spinoandraptos"},"content":"Notes:","lastModifiedDate":"2023-10-28"},{"lineNumber":205,"author":{"gitId":"spinoandraptos"},"content":"* If either the question number is invalid, or no difficulty level is provided,","lastModifiedDate":"2023-10-28"},{"lineNumber":206,"author":{"gitId":"spinoandraptos"},"content":" the app will prompt you to re-enter the markdiff command","lastModifiedDate":"2023-10-28"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":"* The app only supports fixed difficulty levels, assigning any difficulty level that","lastModifiedDate":"2023-10-28"},{"lineNumber":208,"author":{"gitId":"spinoandraptos"},"content":" is not `easy`, `normal`, or `hard` will trigger a warning message","lastModifiedDate":"2023-10-28"},{"lineNumber":209,"author":{"gitId":"spinoandraptos"},"content":"* Input difficulty level is CAPS-friendly","lastModifiedDate":"2023-10-28"},{"lineNumber":210,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":211,"author":{"gitId":"yeo-menghan"},"content":"### Exit Program `bye`","lastModifiedDate":"2023-10-27"},{"lineNumber":212,"author":{"gitId":"yeo-menghan"},"content":"Exits the program","lastModifiedDate":"2023-10-27"},{"lineNumber":213,"author":{"gitId":"yeo-menghan"},"content":"Format: `bye`","lastModifiedDate":"2023-10-27"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":217,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer?","lastModifiedDate":"2020-05-24"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":219,"author":{"gitId":"yeo-menghan"},"content":"**A**: Transfer the tasklist.txt generated to the same local directory as the jar file of the program in another","lastModifiedDate":"2023-10-27"},{"lineNumber":220,"author":{"gitId":"yeo-menghan"},"content":"computer.","lastModifiedDate":"2023-10-27"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":224,"author":{"gitId":"yeo-menghan"},"content":"1. `help` - shows the list of commands you can use","lastModifiedDate":"2023-10-27"},{"lineNumber":225,"author":{"gitId":"yeo-menghan"},"content":"2. `short [question]/[answer]/[module]/[difficulty]` - adds a short answer question and its answer to the list,","lastModifiedDate":"2023-10-27"},{"lineNumber":226,"author":{"gitId":"yeo-menghan"},"content":"3. `list` - shows the list of questions and answers,","lastModifiedDate":"2023-10-27"},{"lineNumber":227,"author":{"gitId":"yeo-menghan"},"content":"4. `delete [question number]` - deletes the question and answer at the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":228,"author":{"gitId":"spinoandraptos"},"content":"5. `find /[description]` - displays all questions that contains the specified description,","lastModifiedDate":"2023-10-28"},{"lineNumber":229,"author":{"gitId":"yeo-menghan"},"content":"6. `find /[module]` - displays all questions that belong to the specified module,","lastModifiedDate":"2023-10-27"},{"lineNumber":230,"author":{"gitId":"yeo-menghan"},"content":"7. `edit [question number] /description [description]` - edits the description of the question with the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":231,"author":{"gitId":"yeo-menghan"},"content":"8. `edit [question number] /answer [answer]` - edits the answer to the question with the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":232,"author":{"gitId":"yeo-menghan"},"content":"9. `start /[quiz mode] [start details] /[qn mode]` - starts the quiz with option for /module or /all and /random or","lastModifiedDate":"2023-10-27"},{"lineNumber":233,"author":{"gitId":"yeo-menghan"},"content":" /normal,","lastModifiedDate":"2023-10-27"},{"lineNumber":234,"author":{"gitId":"yeo-menghan"},"content":"10. `shuffle` - shuffle quiz questions to a random order,","lastModifiedDate":"2023-10-27"},{"lineNumber":235,"author":{"gitId":"yeo-menghan"},"content":"11. `markdiff [question number] [question difficulty]` - sets the difficulty of question with the specified number,","lastModifiedDate":"2023-10-27"},{"lineNumber":236,"author":{"gitId":"yeo-menghan"},"content":"12. `bye` - exits the program","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"spinoandraptos":100,"StevenGX12":38,"yeo-menghan":76,"-":22}},{"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":"James-Hong-Jey"},"content":" public enum CommandType {HELP, ADD, LIST, EDIT, DELETE, START,","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":" SHUFFLE, MARKDIFFICULTY, END, RESULT, FIND, EXIT, INVALID};","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" private CommandType commandType;","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new blank command.","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public Command(){}","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command of given type.","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * @param commandType Type of command.","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" public Command(CommandType commandType){","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-10-04"},{"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":" * Performs an action according to command.","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){}","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * Checks if the latest command calls for program termination.","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" public boolean toExit(){","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" return commandType \u003d\u003d CommandType.EXIT;","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":31,"James-Hong-Jey":5,"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":"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 delete a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class CommandDelete extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as delete [question number]\";","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_INDEX_MSG \u003d \" Ono! You did not indicate question index :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new delete command for a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnIndex 0-based index of question to be deleted.","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandDelete(int qnIndex){","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.DELETE);","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" this.qnIndex \u003d qnIndex;","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" * Deletes the specified task and updates storage data.","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 task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" String taskName \u003d questions.viewQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" if (taskName.equals(\"Question Not Found\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" ui.displayMessage(\" Ono! The question you are deleting is not found!\");","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" questions.deleteQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":21,"James-Hong-Jey":7,"lisizhuang-0121":13}},{"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":"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-08"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to edit a task.","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandEdit extends Command {","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as edit [question number] \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" \"/description [description] or edit /answer [answer]!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_INDEX_MSG \u003d \" Ono! You did not indicate question index :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_CRITERIA_MSG \u003d \" Ono! You did not indicate if \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" \"you are editing question description or answer :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":" public static final String MISSING_KEYWORD_MSG \u003d \" Ono! You did not enter a new description / answer :\u003c\";","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" private String newDescription;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" private String newAnswer;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new edit command","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" public CommandEdit(int qnIndex, String newDescription, String newAnswer) {","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.EDIT);","lastModifiedDate":"2023-10-05"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" this.qnIndex \u003d qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" this.newDescription \u003d newDescription;","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" this.newAnswer \u003d newAnswer;","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" if (newDescription \u003d\u003d null \u0026\u0026 newAnswer \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" questions.editQuestionByIndex(qnIndex, newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":10,"StevenGX12":5,"James-Hong-Jey":5,"lisizhuang-0121":20}},{"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":"lisizhuang-0121"},"content":" public static final String MISSING_CRITERIA_MSG \u003d \" Ono! You did not indicate \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" \"if you are searching by description or module :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_KEYWORD_MSG \u003d \" Ono! You did not indicate \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":" \"the keywords you are searching by :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as find \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":" \"/description [description] or find /module [module]!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private String searchCriteria;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" private String searchDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new find command to search for a task.","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * @param searchDetails User input containing details of what to search.","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandFind(String searchCriteria, String searchDetails){","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" super((CommandType.FIND));","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" this.searchCriteria \u003d searchCriteria;","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" this.searchDetails \u003d searchDetails;","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" }","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":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Marks the specified task as not done and updates storage data.","lastModifiedDate":"2023-10-04"},{"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":"StevenGX12"},"content":" assert questions !\u003d null \u0026\u0026 dataStorage !\u003d null \u0026\u0026 ui !\u003d null : \"Invalid null parameter\";","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" switch (searchCriteria) {","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"lisizhuang-0121"},"content":" case \"description\":","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" questions.searchListByDescription(searchDetails);","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" case \"module\":","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":" questions.searchListByModule(searchDetails);","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" default:","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" ui.displayMessage(INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":24,"StevenGX12":1,"James-Hong-Jey":6,"lisizhuang-0121":21}},{"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":"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":"lisizhuang-0121"},"content":"public class CommandHelp extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandHelp() {","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.HELP);","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":" * Displays all commands available to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":" * ","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" assert questions !\u003d null \u0026\u0026 dataStorage !\u003d null \u0026\u0026 ui !\u003d null : \"Invalid null parameter\";","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":1,"StevenGX12":8,"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.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to mark the difficulty of a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkDifficulty extends Command{","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_INDEX_MSG \u003d \" Ono! You did not indicate index of question to be marked :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String MISSING_DIFFICULTY_MSG \u003d \" Ono! You did not indicate difficulty \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":" \"to be assigned the question :\u003c\";","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as markdiff \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" \"[qn number] [qn difficulty]!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public static final String TOO_MANY_ARGUMENTS_MSG \u003d \" Ono! Markdiff command only takes in 2 arguments\";","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private final int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" private final Question.QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command to mark the difficulty of a question of specified index.","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * @param qnIndex Index of the question which difficulty is to be marked.","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty to be assigned to the question.","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" public CommandMarkDifficulty(int qnIndex, Question.QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.MARKDIFFICULTY);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" this.qnIndex \u003d qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" assert qnDifficulty !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty !\u003d Question.QnDifficulty.INVALID) {","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" questions.markQuestionDifficulty(qnIndex, qnDifficulty, true);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"spinoandraptos":35,"lisizhuang-0121":4}},{"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":"James-Hong-Jey"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as \" +","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" \"short [question]/[answer]/[module]/[difficulty]!\";","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" public static final String MISSING_FIELDS_MSG \u003d \" You have one or more field missing!\";","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yeo-menghan"},"content":" public static final String TOO_MANY_ARGUMENTS_MSG \u003d \" Ono! There should not be arguments after /difficulty\";","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":" public static final String DUPLICATED_INPUT \u003d \" You have a duplicated input, please fill add a different input!\";","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"yeo-menghan"},"content":" public static final String INVALID_DIFFICULTY_MSG \u003d \" Entry will not be added to list\";","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" private final String description;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" private final String answer;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" private final String module;","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":" private final Question.QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new question command to add a SHORTANSWER question","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" * @param description Question description","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" * @param answer answer to question","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" * @param module module of question","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDifficulty difficulty of question","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandShortAnswer(String description, String answer, String module,","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.ADD);","lastModifiedDate":"2023-10-05"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" this.answer \u003d answer;","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" this.module \u003d module;","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" * Adds the SHORTANSWER question and updates storage data.","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" questions.addShortAnswerQn(description, answer, module, qnDifficulty, true);","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":15,"James-Hong-Jey":13,"yeo-menghan":3,"lisizhuang-0121":20}},{"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":"yeo-menghan"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-23"},{"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":"yeo-menghan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"yeo-menghan"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":" * Command to Start the Quiz","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandStart extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_QUIZ_MODE_MSG \u003d \" Ono! You did not indicate mode of the quiz :\u003c \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() + \" Quiz mode must be either \u0027all\u0027 or \u0027module\u0027\";","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_START_DETAILS \u003d \" Ono! You did not indicate start details for the quiz \" +","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" \"mode that you have chosen :\u003c\";","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_QN_MODE_MSG \u003d \" Ono! You did not indicate mode of arranging \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" \"quiz questions :\u003c\";","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_MODE_MSG \u003d \" Question mode must be either \u0027random\u0027 or \u0027normal\u0027\";","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_FORMAT_MSG \u003d \" Please format your input as start \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" \"/[quiz mode] [start details] /[qn mode]!\";","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" public static final String TOO_MANY_ARGUMENTS_MSG \u003d \" Ono! There should not be arguments after /[qn mode]\";","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" private final String startMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" private final String startDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" private final String startQnMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new start command","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * @param startMode Mode to start the quiz with, indicates how questions for the quiz are selected.","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * @param startDetails Details to complement quiz mode for choosing questions for the quiz.","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * @param startQnMode Mode for arranging the questions within the quiz.","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" public CommandStart(String startMode, String startDetails, String startQnMode) {","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.START);","lastModifiedDate":"2023-10-05"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" this.startMode \u003d startMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" this.startDetails \u003d startDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" this.startQnMode \u003d startQnMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":42,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"yeo-menghan"},"content":" * Loop through the array list of questions \u0026 allow the user to answer them.","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"yeo-menghan"},"content":" * If the input given matches EXACTLY (v1.0), then the answer is correct","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"yeo-menghan"},"content":" * returns \"Correct\" or \"Wrong\"","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" assert questions !\u003d null \u0026\u0026 ui !\u003d null \u0026\u0026 dataStorage !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions;","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" switch (startMode.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" case \"module\":","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" assert startDetails !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String[] modules \u003d startDetails.split(\" \");","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" matchedQuestions \u003d questions.categoriseListByModule(modules);","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" case \"all\":","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"yeo-menghan"},"content":" matchedQuestions \u003d questions.getAllQns();","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Please enter a valid quiz mode :\u003c\");","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":" switch(startQnMode.toLowerCase()){","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":" case \"random\":","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"yeo-menghan"},"content":" Collections.shuffle(matchedQuestions); // shuffles matched Questions","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"yeo-menghan"},"content":" questions.startQuiz(ui, matchedQuestions);","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"yeo-menghan"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":" case \"normal\":","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"yeo-menghan"},"content":" questions.startQuiz(ui, matchedQuestions);","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":" break;","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":" default:","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Please enter a valid quiz mode :\u003c\");","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":41,"yeo-menghan":28,"James-Hong-Jey":1,"lisizhuang-0121":14}},{"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":"James-Hong-Jey"},"content":"import quizhub.command.Command;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandExit;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandInvalid;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandList;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandShortAnswer;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandStart;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandEdit;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandDelete;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandFind;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandShuffle;","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandMarkDifficulty;","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.command.CommandHelp;","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Represents a parser that converts user inputs into command objects.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":"public class Parser {","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" * Analyses and extracts relevant information from user input","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" * to create a new Command object of the right type.","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" public static Command parseCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" String[] commandTokens \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" if (commandTokens.length \u003d\u003d 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_COMMAND_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" String commandTitle \u003d commandTokens[0];","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" switch (commandTitle) {","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" case \"bye\":","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" return new CommandExit();","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" case \"list\":","lastModifiedDate":"2023-10-04"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" return new CommandList();","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":" case \"short\":","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" return parseShortAnswerCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" case \"start\":","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" return parseStartCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" case \"edit\":","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" return parseEditCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" case \"delete\":","lastModifiedDate":"2023-10-04"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" return parseDeleteCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" case \"find\":","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":" return parseFindCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" case \"shuffle\":","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":" return new CommandShuffle();","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" case \"markdiff\":","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"lisizhuang-0121"},"content":" return parseMarkDiffCommand(userInput);","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" case \"help\":","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" return new CommandHelp();","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-04"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_COMMAND_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (Exception error) {","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Extracts relevant information after a specified keyword","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * from CLI user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" * @param keyWord The keyword used to partition the user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" public static String getContentAfterKeyword(String userInput, String keyWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" throws ArrayIndexOutOfBoundsException {","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" String content;","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" content \u003d userInput.split(keyWord)[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" if (content.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" return content;","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" * Extracts difficulty from user command to assign to a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * Default invalid difficulty is assigned if invalid difficulty given.","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" * @param difficulty The difficulty level defined by user in CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" public static Question.QnDifficulty extractQuestionDifficulty(String difficulty) {","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" switch (difficulty.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" case \"easy\":","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.EASY;","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" case \"hard\":","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.HARD;","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" case \"normal\":","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Ui.INVALID_QUESTION_DIFFICULTY_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" return Question.QnDifficulty.INVALID;","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Short Answer Command","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Short Answer command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseShortAnswerCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"yeo-menghan"},"content":" String description;","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"yeo-menghan"},"content":" String answer;","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"yeo-menghan"},"content":" String module;","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"yeo-menghan"},"content":" String difficulty;","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":116,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":117,"author":{"gitId":"yeo-menghan"},"content":" // Split the input by \u0027short\u0027 and then by \u0027/\u0027 to separate the parts","lastModifiedDate":"2023-10-28"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":" String[] inputTokens \u003d userInput.split(\"short\")[1].strip().split(\"/\");","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"yeo-menghan"},"content":" // Check if there are exactly 4 parts (description, answer, module, difficulty)","lastModifiedDate":"2023-10-29"},{"lineNumber":121,"author":{"gitId":"yeo-menghan"},"content":" if (inputTokens.length \u003e 4) {","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"yeo-menghan"},"content":" return new CommandInvalid(CommandShortAnswer.TOO_MANY_ARGUMENTS_MSG);","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" // Extract the values for description, answer, module, and difficulty","lastModifiedDate":"2023-10-28"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":" description \u003d inputTokens[0].strip();","lastModifiedDate":"2023-10-28"},{"lineNumber":127,"author":{"gitId":"yeo-menghan"},"content":" answer \u003d inputTokens[1].strip();","lastModifiedDate":"2023-10-28"},{"lineNumber":128,"author":{"gitId":"yeo-menghan"},"content":" module \u003d inputTokens[2].strip();","lastModifiedDate":"2023-10-28"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":" difficulty \u003d inputTokens[3].strip();","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"lisizhuang-0121"},"content":" if (description.isEmpty() || answer.isEmpty() || module.isEmpty() || difficulty.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":132,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandShortAnswer.MISSING_FIELDS_MSG +","lastModifiedDate":"2023-10-25"},{"lineNumber":133,"author":{"gitId":"lisizhuang-0121"},"content":" System.lineSeparator() + CommandShortAnswer.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":134,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":135,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty qnDifficulty \u003d extractQuestionDifficulty(difficulty);","lastModifiedDate":"2023-10-25"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" if(qnDifficulty.equals(Question.QnDifficulty.INVALID)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"yeo-menghan"},"content":" return new CommandInvalid(CommandShortAnswer.INVALID_DIFFICULTY_MSG);","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandShortAnswer(description, answer, module, qnDifficulty);","lastModifiedDate":"2023-10-25"},{"lineNumber":141,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":143,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandShortAnswer.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":144,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":145,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":146,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":148,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Delete Command","lastModifiedDate":"2023-10-25"},{"lineNumber":149,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":150,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":151,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Delete command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":152,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseDeleteCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"lisizhuang-0121"},"content":" int qnIndex;","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"lisizhuang-0121"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"lisizhuang-0121"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"lisizhuang-0121"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandDelete(qnIndex);","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":162,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandDelete.MISSING_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":168,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Find Command","lastModifiedDate":"2023-10-25"},{"lineNumber":171,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":172,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Find command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":174,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":175,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseFindCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":176,"author":{"gitId":"lisizhuang-0121"},"content":" String searchCriteria;","lastModifiedDate":"2023-10-25"},{"lineNumber":177,"author":{"gitId":"lisizhuang-0121"},"content":" String searchKeyword;","lastModifiedDate":"2023-10-25"},{"lineNumber":178,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":179,"author":{"gitId":"lisizhuang-0121"},"content":" searchCriteria \u003d userInput.split(\"/\")[1].strip().split(\" \")[0].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":180,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":181,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandFind.MISSING_CRITERIA_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":183,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"lisizhuang-0121"},"content":" try{","lastModifiedDate":"2023-10-25"},{"lineNumber":185,"author":{"gitId":"lisizhuang-0121"},"content":" searchKeyword \u003d userInput.split(\"/\" + searchCriteria)[1].strip();","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-25"},{"lineNumber":187,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(CommandFind.MISSING_KEYWORD_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-25"},{"lineNumber":188,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-25"},{"lineNumber":189,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandFind(searchCriteria, searchKeyword);","lastModifiedDate":"2023-10-25"},{"lineNumber":191,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":192,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":193,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":194,"author":{"gitId":"James-Hong-Jey"},"content":" * Attempt to parse user input into an Edit Command","lastModifiedDate":"2023-10-26"},{"lineNumber":195,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":196,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":197,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Edit command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":198,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":199,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseEditCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":200,"author":{"gitId":"StevenGX12"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-26"},{"lineNumber":201,"author":{"gitId":"StevenGX12"},"content":" String editCriteria;","lastModifiedDate":"2023-10-26"},{"lineNumber":202,"author":{"gitId":"StevenGX12"},"content":" int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"StevenGX12"},"content":" String newDescription \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":204,"author":{"gitId":"StevenGX12"},"content":" String newAnswer \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":205,"author":{"gitId":"StevenGX12"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"StevenGX12"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":207,"author":{"gitId":"StevenGX12"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":208,"author":{"gitId":"StevenGX12"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":209,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":211,"author":{"gitId":"StevenGX12"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"StevenGX12"},"content":" return new CommandInvalid(CommandEdit.MISSING_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"StevenGX12"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"StevenGX12"},"content":" editCriteria \u003d editDetails[2].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"StevenGX12"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"StevenGX12"},"content":" return new CommandInvalid(CommandEdit.MISSING_CRITERIA_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"StevenGX12"},"content":" try{","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"StevenGX12"},"content":" switch (editCriteria){","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"StevenGX12"},"content":" case \"/description\":","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"StevenGX12"},"content":" newDescription \u003d Parser.getContentAfterKeyword(userInput, \"/description\");","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"StevenGX12"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"StevenGX12"},"content":" case \"/answer\":","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"StevenGX12"},"content":" newAnswer \u003d Parser.getContentAfterKeyword(userInput, \"/answer\");","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"StevenGX12"},"content":" break;","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"StevenGX12"},"content":" default:","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"StevenGX12"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"StevenGX12"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"StevenGX12"},"content":" return new CommandInvalid(CommandEdit.MISSING_KEYWORD_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"StevenGX12"},"content":" CommandEdit.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":235,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":236,"author":{"gitId":"StevenGX12"},"content":" return new CommandEdit(qnIndex, newDescription, newAnswer);","lastModifiedDate":"2023-10-26"},{"lineNumber":237,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":238,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":239,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":240,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Start Quiz Command","lastModifiedDate":"2023-10-25"},{"lineNumber":241,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Start Quiz command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":244,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":245,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseStartCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" String startMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"spinoandraptos"},"content":" String startDetails \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"spinoandraptos"},"content":" String startQnMode;","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\"/\");","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"spinoandraptos"},"content":" String startInfo;","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"spinoandraptos"},"content":" startInfo \u003d commandDetails[1];","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"spinoandraptos"},"content":" startMode \u003d startInfo.split(\" \")[0].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_QUIZ_MODE_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":256,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"spinoandraptos"},"content":" if(!startMode.equalsIgnoreCase(\"all\")){","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"spinoandraptos"},"content":" startDetails \u003d startInfo.split(startMode)[1].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"spinoandraptos"},"content":" if(startDetails.equals(\"\")){","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_START_DETAILS + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":263,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":264,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_START_DETAILS + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":268,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":269,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"spinoandraptos"},"content":" // Reads in /random or /normal","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"spinoandraptos"},"content":" startQnMode \u003d commandDetails[2].split(\" \")[0].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"spinoandraptos"},"content":" if (startQnMode.isEmpty()) {","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_QN_MODE_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":275,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":276,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"spinoandraptos"},"content":" if (!startQnMode.equals(\"random\") \u0026\u0026 !startQnMode.equals(\"normal\")) {","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"spinoandraptos"},"content":" throw new IllegalArgumentException(CommandStart.INVALID_MODE_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"spinoandraptos"},"content":" if(commandDetails[2].split(\" \").length !\u003d 1){","lastModifiedDate":"2023-10-27"},{"lineNumber":281,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.TOO_MANY_ARGUMENTS_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":282,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":283,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":284,"author":{"gitId":"spinoandraptos"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(e.getMessage() + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-27"},{"lineNumber":288,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandStart.MISSING_QN_MODE_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":289,"author":{"gitId":"spinoandraptos"},"content":" CommandStart.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":290,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"spinoandraptos"},"content":" return new CommandStart(startMode, startDetails, startQnMode);","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":293,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":294,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":295,"author":{"gitId":"lisizhuang-0121"},"content":" * Attempt to parse user input into a Mark Difficulty Command","lastModifiedDate":"2023-10-25"},{"lineNumber":296,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-25"},{"lineNumber":297,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput Raw command entered by the user","lastModifiedDate":"2023-10-25"},{"lineNumber":298,"author":{"gitId":"lisizhuang-0121"},"content":" * @return Mark Difficulty command or an Invalid Command","lastModifiedDate":"2023-10-25"},{"lineNumber":299,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":300,"author":{"gitId":"lisizhuang-0121"},"content":" private static Command parseMarkDiffCommand(String userInput) {","lastModifiedDate":"2023-10-25"},{"lineNumber":301,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"spinoandraptos"},"content":" int qnIndex;","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"spinoandraptos"},"content":" Question.QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"spinoandraptos"},"content":" String qnIndexString;","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"spinoandraptos"},"content":" String qnDifficultyString;","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"spinoandraptos"},"content":" qnIndexString \u003d commandDetails[1].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":308,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":309,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandMarkDifficulty.MISSING_INDEX_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-26"},{"lineNumber":310,"author":{"gitId":"spinoandraptos"},"content":" CommandMarkDifficulty.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":311,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":312,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":313,"author":{"gitId":"spinoandraptos"},"content":" qnIndex \u003d Integer.parseInt(qnIndexString);","lastModifiedDate":"2023-10-26"},{"lineNumber":314,"author":{"gitId":"spinoandraptos"},"content":" if(qnIndex \u003c 0){","lastModifiedDate":"2023-10-26"},{"lineNumber":315,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":316,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":317,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":318,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(Ui.INVALID_INTEGER_INDEX_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":319,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":320,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-26"},{"lineNumber":321,"author":{"gitId":"spinoandraptos"},"content":" qnDifficultyString \u003d commandDetails[2].strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":322,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-26"},{"lineNumber":323,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandMarkDifficulty.MISSING_DIFFICULTY_MSG);","lastModifiedDate":"2023-10-26"},{"lineNumber":324,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":325,"author":{"gitId":"spinoandraptos"},"content":" if(commandDetails.length !\u003d 3){","lastModifiedDate":"2023-10-27"},{"lineNumber":326,"author":{"gitId":"spinoandraptos"},"content":" return new CommandInvalid(CommandMarkDifficulty.TOO_MANY_ARGUMENTS_MSG + System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":327,"author":{"gitId":"spinoandraptos"},"content":" CommandMarkDifficulty.INVALID_FORMAT_MSG);","lastModifiedDate":"2023-10-27"},{"lineNumber":328,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":329,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Parser.extractQuestionDifficulty(qnDifficultyString);","lastModifiedDate":"2023-10-26"},{"lineNumber":330,"author":{"gitId":"spinoandraptos"},"content":" return new CommandMarkDifficulty(qnIndex, qnDifficulty);","lastModifiedDate":"2023-10-26"},{"lineNumber":331,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":332,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":143,"StevenGX12":36,"James-Hong-Jey":20,"yeo-menghan":24,"lisizhuang-0121":109}},{"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, INVALID};","lastModifiedDate":"2023-10-27"},{"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":"StevenGX12"},"content":" if(!newDescription.equals(\"\")){","lastModifiedDate":"2023-10-26"},{"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":33,"James-Hong-Jey":8,"lisizhuang-0121":3}},{"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":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Returns question answer.","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionAnswer() {","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" return this.answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestion(String newDescription, String newAnswer) {","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" super.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" if(!newAnswer.equals(\"\")){","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" this.answer \u003d newAnswer;","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":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" * Returns question-answer pair, separated by a vertical bar.","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" public String getQuestionDescription() {","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" return super.getQuestionDescription().strip() + \" / \" + this.answer.strip() + \" | \" + super.getModule()","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" + \" | \" + super.getDifficulty().toString();","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":43,"StevenGX12":2,"James-Hong-Jey":5,"yeo-menghan":1,"lisizhuang-0121":2}},{"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":"yeo-menghan"},"content":"import quizhub.command.CommandShortAnswer;","lastModifiedDate":"2023-10-29"},{"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":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" * Adds a short answer question to the current question list.","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" * @param description The Question Description","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" * @param answer The answer of the Question","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" * @param module The module of the Question","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDifficulty The difficulty level of the questions","lastModifiedDate":"2023-10-25"},{"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":"lisizhuang-0121"},"content":" public void addShortAnswerQn(String description, String answer, String module,","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty qnDifficulty, boolean showMessage){","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"yeo-menghan"},"content":" if(containsDuplicateShortAnswer(description, answer, module, qnDifficulty)){","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(CommandShortAnswer.DUPLICATED_INPUT + System.lineSeparator());","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"yeo-menghan"},"content":" } else{","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" allQns.add(new ShortAnsQn(description, answer, module, qnDifficulty));","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" I have added the following question OwO:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S] %s\\n\", viewQuestionByIndex(getQuestionListSize()));","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":" * Checks if a duplicate short answer question with the same description, answer, module, and difficulty","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"yeo-menghan"},"content":" * already exists in the list.","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"yeo-menghan"},"content":" * @param description The description of the short answer question.","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"yeo-menghan"},"content":" * @param answer The answer of the short answer question.","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":" * @param module The module of the short answer question.","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":" * @param difficulty The difficulty level of the short answer question.","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":" * @return true if a duplicate exists, false otherwise.","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"yeo-menghan"},"content":" public boolean containsDuplicateShortAnswer(String description, String answer, String module,","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"yeo-menghan"},"content":" Question.QnDifficulty difficulty) {","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"yeo-menghan"},"content":" // Create a formatted string to match the format produced by getQuestionDescription","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"yeo-menghan"},"content":" String formattedParameters \u003d description.strip() + \" / \" + answer.strip() + \" | \" + module + \" | \"","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"yeo-menghan"},"content":" + difficulty.toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"yeo-menghan"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"yeo-menghan"},"content":" if (formattedParameters.equalsIgnoreCase(question.getQuestionDescription())) {","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"yeo-menghan"},"content":" return true; // Found a duplicate","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"yeo-menghan"},"content":" return false; // No duplicate found","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints the details of a question in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" * @param question The question in which details are to be printed.","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"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":78,"author":{"gitId":"James-Hong-Jey"},"content":" * in addition to the details of the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestion(Question question, boolean asList){","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"James-Hong-Jey"},"content":" int qnIndex \u003d allQns.indexOf(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"James-Hong-Jey"},"content":" switch(question.getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"James-Hong-Jey"},"content":" if (question.questionIsDone()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][X] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][X] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"James-Hong-Jey"},"content":"","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":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":95,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":96,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":97,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints all the questions in the current question list as an indexed list.","lastModifiedDate":"2023-10-08"},{"lineNumber":105,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestionList(){","lastModifiedDate":"2023-10-08"},{"lineNumber":107,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":108,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No questions found! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":109,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":111,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":113,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":114,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":115,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":116,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":117,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":118,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":119,"author":{"gitId":"James-Hong-Jey"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-08"},{"lineNumber":120,"author":{"gitId":"James-Hong-Jey"},"content":" * after question is marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":121,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":122,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsDone (int index, boolean showMessage){","lastModifiedDate":"2023-10-08"},{"lineNumber":123,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":124,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" if(!question.questionIsDone()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" question.markAsDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"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":129,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":136,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":137,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":139,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as not done.","lastModifiedDate":"2023-10-08"},{"lineNumber":140,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsNotDone(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":143,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" if(question.questionIsDone()){","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" question.markAsNotDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"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":147,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally not done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" * Mark the difficulty of a question in the current question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty to be assigned to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" * after question difficulty is marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" public void markQuestionDifficulty(int index, Question.QnDifficulty qnDifficulty, boolean showMessage){","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" String difficulty \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" switch (qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" case EASY:","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"easy\";","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":" case HARD:","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"hard\";","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" case NORMAL:","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"normal\";","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"spinoandraptos"},"content":" if(question.getDifficulty() !\u003d qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":181,"author":{"gitId":"spinoandraptos"},"content":" allQns.get(index-1).markDifficulty(qnDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":182,"author":{"gitId":"spinoandraptos"},"content":" if(showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have marked the following question as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":184,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":" \" \u003ew\u003c !\");","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question is already set as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":190,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":" \" ! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":192,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":193,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":194,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":195,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":196,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":197,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":198,"author":{"gitId":"James-Hong-Jey"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":199,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":200,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":201,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":202,"author":{"gitId":"James-Hong-Jey"},"content":" public void deleteQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":203,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":204,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":205,"author":{"gitId":"James-Hong-Jey"},"content":" allQns.remove(index - 1);","lastModifiedDate":"2023-10-08"},{"lineNumber":206,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have deleted the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":207,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":208,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":209,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":210,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":211,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":212,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":213,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":214,"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":215,"author":{"gitId":"James-Hong-Jey"},"content":" * Used to display question details in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":216,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":217,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be viewed.","lastModifiedDate":"2023-10-08"},{"lineNumber":218,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":219,"author":{"gitId":"James-Hong-Jey"},"content":" public String viewQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":220,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":221,"author":{"gitId":"James-Hong-Jey"},"content":" switch(allQns.get(index-1).getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":222,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":223,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.get(index-1).getQuestionDescription();","lastModifiedDate":"2023-10-08"},{"lineNumber":224,"author":{"gitId":"James-Hong-Jey"},"content":" default:","lastModifiedDate":"2023-10-08"},{"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":"StevenGX12"},"content":" } catch(InputMismatchException |NullPointerException | IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-21"},{"lineNumber":228,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":229,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":230,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":231,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":232,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":233,"author":{"gitId":"spinoandraptos"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":234,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":235,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":236,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":237,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestionByIndex(int index, String newDescription, String newAnswer){","lastModifiedDate":"2023-10-08"},{"lineNumber":238,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":239,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":240,"author":{"gitId":"spinoandraptos"},"content":" question.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":241,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have edited the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":243,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":244,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":245,"author":{"gitId":"spinoandraptos"},"content":" if(index !\u003d 0){","lastModifiedDate":"2023-10-08"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":247,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":248,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":249,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":250,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":251,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their description.","lastModifiedDate":"2023-10-08"},{"lineNumber":252,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":253,"author":{"gitId":"James-Hong-Jey"},"content":" * @param keyword Description keyword(s) used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":254,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":255,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByDescription(String keyword){","lastModifiedDate":"2023-10-08"},{"lineNumber":256,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":257,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":258,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":259,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":260,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":261,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":262,"author":{"gitId":"StevenGX12"},"content":" if(question.getQuestionDescription().toLowerCase().contains(keyword.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":263,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":264,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":265,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":266,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":267,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":268,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No results found :\u003c Check your keyword is correct?\");","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":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":272,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":273,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their date and time.","lastModifiedDate":"2023-10-08"},{"lineNumber":274,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":275,"author":{"gitId":"James-Hong-Jey"},"content":" * @param dateTime Date and time used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":276,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":277,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByTime(String dateTime){","lastModifiedDate":"2023-10-08"},{"lineNumber":278,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":279,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":280,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":281,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":282,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":283,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":284,"author":{"gitId":"James-Hong-Jey"},"content":" if(question.getQuestionTiming(true).contains(dateTime)){","lastModifiedDate":"2023-10-08"},{"lineNumber":285,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":286,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":287,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":288,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":289,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":290,"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":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":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":294,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":295,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":296,"author":{"gitId":"StevenGX12"},"content":" * Search for questions in the current question list using their module.","lastModifiedDate":"2023-10-21"},{"lineNumber":297,"author":{"gitId":"StevenGX12"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":298,"author":{"gitId":"StevenGX12"},"content":" * @param module Module used to search for matches.","lastModifiedDate":"2023-10-21"},{"lineNumber":299,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":300,"author":{"gitId":"StevenGX12"},"content":" public void searchListByModule(String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":301,"author":{"gitId":"StevenGX12"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":302,"author":{"gitId":"StevenGX12"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":303,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-21"},{"lineNumber":304,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"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 modules Modules used to search for matches.","lastModifiedDate":"2023-10-27"},{"lineNumber":321,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":322,"author":{"gitId":"spinoandraptos"},"content":" public ArrayList\u003cQuestion\u003e categoriseListByModule(String[] modules){","lastModifiedDate":"2023-10-27"},{"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 (String module : modules) {","lastModifiedDate":"2023-10-27"},{"lineNumber":329,"author":{"gitId":"spinoandraptos"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-22"},{"lineNumber":330,"author":{"gitId":"spinoandraptos"},"content":" if (question.getModule().toLowerCase().matches(module.toLowerCase())) {","lastModifiedDate":"2023-10-22"},{"lineNumber":331,"author":{"gitId":"spinoandraptos"},"content":" matchedQuestions.add(question);","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":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":335,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":336,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions emptyList){","lastModifiedDate":"2023-10-22"},{"lineNumber":337,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(emptyList.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":338,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":339,"author":{"gitId":"spinoandraptos"},"content":" return matchedQuestions;","lastModifiedDate":"2023-10-22"},{"lineNumber":340,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":341,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":342,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns the size of current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":343,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":344,"author":{"gitId":"James-Hong-Jey"},"content":" public int getQuestionListSize(){","lastModifiedDate":"2023-10-08"},{"lineNumber":345,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.size();","lastModifiedDate":"2023-10-08"},{"lineNumber":346,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":347,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":348,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns a list of all questions in the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":349,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":350,"author":{"gitId":"James-Hong-Jey"},"content":" public ArrayList\u003cQuestion\u003e getAllQns(){","lastModifiedDate":"2023-10-08"},{"lineNumber":351,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns;","lastModifiedDate":"2023-10-08"},{"lineNumber":352,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":353,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":354,"author":{"gitId":"James-Hong-Jey"},"content":" * Shuffles the order of questions in the deck","lastModifiedDate":"2023-10-21"},{"lineNumber":355,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":356,"author":{"gitId":"James-Hong-Jey"},"content":" public void shuffleQuestions() {","lastModifiedDate":"2023-10-21"},{"lineNumber":357,"author":{"gitId":"James-Hong-Jey"},"content":" Collections.shuffle(allQns);","lastModifiedDate":"2023-10-21"},{"lineNumber":358,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":359,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":360,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the answer for a question by its index in the question list.","lastModifiedDate":"2023-10-09"},{"lineNumber":361,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-09"},{"lineNumber":362,"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":363,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":364,"author":{"gitId":"spinoandraptos"},"content":" public String getAnswerByIndex(int index, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":365,"author":{"gitId":"yeo-menghan"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":366,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(index - 1);","lastModifiedDate":"2023-10-22"},{"lineNumber":367,"author":{"gitId":"yeo-menghan"},"content":" if (question instanceof ShortAnsQn) {","lastModifiedDate":"2023-10-09"},{"lineNumber":368,"author":{"gitId":"yeo-menghan"},"content":" return ((ShortAnsQn) question).getQuestionAnswer();","lastModifiedDate":"2023-10-09"},{"lineNumber":369,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":370,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" This question is not a Short Answer question.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":371,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":372,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":373,"author":{"gitId":"yeo-menghan"},"content":" } catch (IndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-09"},{"lineNumber":374,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Ono! Please enter a valid question number *sobs*\");","lastModifiedDate":"2023-10-09"},{"lineNumber":375,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":376,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":377,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":378,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":379,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":380,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the question by its index in the question list.","lastModifiedDate":"2023-10-16"},{"lineNumber":381,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":382,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-16"},{"lineNumber":383,"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":384,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":385,"author":{"gitId":"yeo-menghan"},"content":" public String getQuestionTextByIndex(int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":386,"author":{"gitId":"yeo-menghan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c allQns.size()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":387,"author":{"gitId":"yeo-menghan"},"content":" Question question \u003d allQns.get(index);","lastModifiedDate":"2023-10-16"},{"lineNumber":388,"author":{"gitId":"yeo-menghan"},"content":" return question.toString(); // Use the toString() method to get the text of the question","lastModifiedDate":"2023-10-16"},{"lineNumber":389,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":390,"author":{"gitId":"yeo-menghan"},"content":" return null; // Handle invalid index","lastModifiedDate":"2023-10-16"},{"lineNumber":391,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":392,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":393,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":394,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":395,"author":{"gitId":"yeo-menghan"},"content":" * Starts a quiz session using the provided user interface (UI).","lastModifiedDate":"2023-10-09"},{"lineNumber":396,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":397,"author":{"gitId":"yeo-menghan"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":398,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":399,"author":{"gitId":"spinoandraptos"},"content":" public void startQuiz(Ui ui, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":400,"author":{"gitId":"spinoandraptos"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":401,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" No questions found! Add questions before starting the quiz.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":402,"author":{"gitId":"yeo-menghan"},"content":" return;","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":" ui.displayMessage(\" Starting the quiz...\");","lastModifiedDate":"2023-10-17"},{"lineNumber":406,"author":{"gitId":"spinoandraptos"},"content":" int totalQuestions \u003d questions.size();","lastModifiedDate":"2023-10-22"},{"lineNumber":407,"author":{"gitId":"yeo-menghan"},"content":" int correctAnswers \u003d 0;","lastModifiedDate":"2023-10-09"},{"lineNumber":408,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":409,"author":{"gitId":"yeo-menghan"},"content":" for (int i \u003d 0; i \u003c totalQuestions; i++) {","lastModifiedDate":"2023-10-09"},{"lineNumber":410,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":411,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":412,"author":{"gitId":"yeo-menghan"},"content":" ui.displayQuestion(question, i + 1, totalQuestions);","lastModifiedDate":"2023-10-09"},{"lineNumber":413,"author":{"gitId":"spinoandraptos"},"content":" String correctAnswer \u003d getAnswerByIndex(i + 1, questions).strip(); // Get correct answer by index","lastModifiedDate":"2023-10-22"},{"lineNumber":414,"author":{"gitId":"lisizhuang-0121"},"content":" String userAnswer \u003d ui.getUserInput().strip();","lastModifiedDate":"2023-10-17"},{"lineNumber":415,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":416,"author":{"gitId":"yeo-menghan"},"content":" if (userAnswer.equalsIgnoreCase(correctAnswer)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":417,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Correct!\");","lastModifiedDate":"2023-10-27"},{"lineNumber":418,"author":{"gitId":"yeo-menghan"},"content":" correctAnswers++;","lastModifiedDate":"2023-10-09"},{"lineNumber":419,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":420,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Wrong!\");","lastModifiedDate":"2023-10-27"},{"lineNumber":421,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":422,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":423,"author":{"gitId":"yeo-menghan"},"content":" int questionsLeft \u003d totalQuestions - (i + 1);","lastModifiedDate":"2023-10-09"},{"lineNumber":424,"author":{"gitId":"yeo-menghan"},"content":" if (questionsLeft \u003e 0) {","lastModifiedDate":"2023-10-09"},{"lineNumber":425,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Questions left: \" + questionsLeft);","lastModifiedDate":"2023-10-27"},{"lineNumber":426,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":427,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Quiz completed!\");","lastModifiedDate":"2023-10-27"},{"lineNumber":428,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":429,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":430,"author":{"gitId":"spinoandraptos"},"content":" ui.displayMessage(\" Your score: \" + correctAnswers + \"/\" + totalQuestions);","lastModifiedDate":"2023-10-27"},{"lineNumber":431,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":432,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"spinoandraptos":121,"StevenGX12":25,"James-Hong-Jey":184,"yeo-menghan":91,"lisizhuang-0121":11}},{"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":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import java.io.File;","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * Represents the hard disk storage where","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" * question data is stored, read and updated.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"public class Storage {","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" private File dataFile;","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is stored and read from.","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" dataFile \u003d new File(filePath);","lastModifiedDate":"2023-10-04"},{"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":" * Write in new data to storage.","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is written to.","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param textToAdd Data to be written.","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"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":31,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" private void writeToFile(String filePath, String textToAdd, boolean toAppend) throws IOException {","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath, toAppend);","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.write(textToAdd);","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.close();","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" * Adds a question from storage into question list being built.","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnType Type of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDescription Description of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnDoneStatus Done status of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" * @param difficulty Difficulty of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" * @param qnModule Module of current question.","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" private int addQuestionFromFile(QuestionList questions, String qnType, String qnDescription,","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" String qnDoneStatus, Question.QnDifficulty difficulty,","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" String qnModule) {","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" switch (qnType) {","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" case \"S\":","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"lisizhuang-0121"},"content":" // Split the description by \"/\" and check for empty fields","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" String[] qnTokens \u003d qnDescription.split(\"/\");","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"lisizhuang-0121"},"content":" if (qnTokens[0].isEmpty() || qnTokens[1].isEmpty() || qnModule.isEmpty()) {","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"lisizhuang-0121"},"content":" return 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"lisizhuang-0121"},"content":" questions.addShortAnswerQn(qnTokens[0], qnTokens[1], qnModule, difficulty, false);","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"lisizhuang-0121"},"content":" if (qnDoneStatus.equals(\"done\")) {","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"lisizhuang-0121"},"content":" questions.markQuestionAsDone(questions.getQuestionListSize(), false);","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" return 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" return 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" return 1;","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" * Parse raw questions read from the question file and store them in the questionList","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":" * Used at start of program to load all questions from the file","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" * @param rawQuestions the arrayList of question strings to be parsed","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" * @param questions the questionList object for string parsed questions","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseQuestionsFromStrings(ArrayList\u003cString\u003e rawQuestions, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" int failedQuestions \u003d 0;","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" for (int i \u003d 1; i \u003c rawQuestions.size(); i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" String currentQuestion \u003d rawQuestions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"lisizhuang-0121"},"content":" String[] questionSubStrings \u003d currentQuestion.split(\"\\\\|\");","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":" String questionType \u003d questionSubStrings[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDoneStatus \u003d questionSubStrings[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDescription \u003d questionSubStrings[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"lisizhuang-0121"},"content":" String questionModule \u003d questionSubStrings[3].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDifficulty \u003d questionSubStrings[4].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty difficulty \u003d Parser.extractQuestionDifficulty(questionDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":" failedQuestions +\u003d addQuestionFromFile(questions, questionType, questionDescription,","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" questionDoneStatus, difficulty, questionModule);","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" failedQuestions++;","lastModifiedDate":"2023-10-25"},{"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":" System.out.println(\" \" + failedQuestions + \" questions parsed unsuccessfully from storage file\\n\");","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" * Build a new question list from data stored in hard disk.","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"James-Hong-Jey"},"content":" * Used at program start to build the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":101,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" public void buildCurrentListFromFile(QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" if (dataFile.createNewFile()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":106,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question-list created: \" + dataFile.getName());","lastModifiedDate":"2023-10-08"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" } catch(NullPointerException | IOException invalidFilePath) {","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":111,"author":{"gitId":"James-Hong-Jey"},"content":" int questionIndex \u003d 0;","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" Scanner fileScanner \u003d new Scanner(dataFile);","lastModifiedDate":"2023-10-04"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":" // Pipe all lines into string arrayList for processing","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":" ArrayList\u003cString\u003e rawQuestions \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" String rawQuestion \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":" rawQuestions.add(rawQuestion);","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":" if (rawQuestions.size() \u003c\u003d 1) {","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":123,"author":{"gitId":"lisizhuang-0121"},"content":" parseQuestionsFromStrings(rawQuestions, questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"James-Hong-Jey"},"content":" } catch(NullPointerException | IOException invalidFilePath) {","lastModifiedDate":"2023-10-25"},{"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":"James-Hong-Jey"},"content":" } catch(NullPointerException | IOException invalidFilePath) {","lastModifiedDate":"2023-10-25"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-10-04"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":73,"James-Hong-Jey":26,"lisizhuang-0121":78}},{"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":"James-Hong-Jey"},"content":" public static final String INVALID_COMMAND_MSG \u003d \" Please enter a valid command :0\";","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_COMMAND_FEEDBACK \u003d \" Here are the list of commands you can use:\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" \" 1. help - shows the list of commands you can use,\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" \" 2. short [question]/[answer]/[module]/[difficulty] - adds a short answer question and \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" \"its answer to the list,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" \" 3. list - shows the list of questions and answers,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \" 6. find /[module] - displays all questions that belong to the specified module,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" \" 7. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" \" 8. edit [question number] /answer [answer] - edits the answer to the question with \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" \"the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" \" 9. start /[quiz mode] [start details] /[qn mode] - \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" \"starts the quiz with option for /module or /all and /random or /normal,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" \" 10. shuffle - shuffle quiz questions to a random order,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" \" 11. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-27"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" \" 12. bye - exits the program\";","lastModifiedDate":"2023-10-27"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_INTEGER_INDEX_MSG \u003d \" Please enter valid integer index!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" public static final String MISSING_QUESTION_NUMBER_MSG \u003d \" Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_QUESTION_DIFFICULTY_MSG \u003d \" Ono! We only support easy, normal and hard \" +","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" \"difficulty levels\" + System.lineSeparator() + \" No changes will be made to your difficulty level\";","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" private final Scanner input \u003d new Scanner(System.in); // Create a Scanner object","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" private QuestionList tasks;","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" * Sets up the bridging between the UI and tasks data.","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"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":57,"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":58,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" public Ui(Storage dataStorage, QuestionList tasks){","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" this.dataStorage \u003d dataStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" * Print out separating line in CLI to mark","lastModifiedDate":"2023-10-04"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" * start and end of chatbot replies.","lastModifiedDate":"2023-10-04"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" public void showLine(){","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" * Displays app logo and opening message to welcome users","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * on the launch of chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" public void displayOpeningMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" String logo \u003d \" _______ _________ _______ ______ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" \" ( ___ )|\\\\ /|\\\\__ __// ___ )|\\\\ /||\\\\ /|( ___ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" \" | ( ) || ) ( | ) ( \\\\/ ) || ) ( || ) ( || ( ) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / )| (___) || | | || (__/ / \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / / | ___ || | | || __ ( \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" \" | | /\\\\| || | | | | | / / | ( ) || | | || ( \\\\ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" \" | (_\\\\ \\\\ || (___) |___) (___ / (_/\\\\| ) ( || (___) || )___) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" \" (____\\\\/_)(_______)\\\\_______/(_______/|/ \\\\|(_______)|/ \\\\___/\";","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" System.out.println(logo);","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Welcome to Quizhub!!!\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Let the quizzing begin XDD\");","lastModifiedDate":"2023-10-09"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" System.out.println();","lastModifiedDate":"2023-10-04"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.loadData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" assert tasks !\u003d null : \"Invalid null tasks\";","lastModifiedDate":"2023-10-24"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" * Retrieves the CLI input from the user","lastModifiedDate":"2023-10-04"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" * and documents it as a String object.","lastModifiedDate":"2023-10-04"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" if(input.hasNextLine()){","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" * Displays closing message on exiting the chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" public void displayClosingMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Are you sure you want to stop quizzing?\");","lastModifiedDate":"2023-10-09"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Well... hope you had fun quizzing :D\");","lastModifiedDate":"2023-10-09"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" See you again soon!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":115,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":116,"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":117,"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":118,"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":119,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":120,"author":{"gitId":"yeo-menghan"},"content":" * @param question The Question object containing the question description.","lastModifiedDate":"2023-10-09"},{"lineNumber":121,"author":{"gitId":"yeo-menghan"},"content":" * @param currentQuestionIndex The index of the current question in the set of questions.","lastModifiedDate":"2023-10-09"},{"lineNumber":122,"author":{"gitId":"yeo-menghan"},"content":" * @param totalQuestions The total count of questions in the set.","lastModifiedDate":"2023-10-09"},{"lineNumber":123,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":124,"author":{"gitId":"yeo-menghan"},"content":" public void displayQuestion(Question question, int currentQuestionIndex, int totalQuestions) {","lastModifiedDate":"2023-10-09"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" showLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Question \" + currentQuestionIndex + \" / \" + totalQuestions + \":\");","lastModifiedDate":"2023-10-09"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" // getQuestionDescription returns question/answer","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" String questionDescription \u003d question.getQuestionDescription();","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":" String[] parts \u003d questionDescription.split(\"/\");","lastModifiedDate":"2023-10-09"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":131,"author":{"gitId":"yeo-menghan"},"content":" if (parts.length \u003e\u003d 1) {","lastModifiedDate":"2023-10-09"},{"lineNumber":132,"author":{"gitId":"yeo-menghan"},"content":" // Extract and display the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":133,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" \" + parts[0]); // part[0] returns the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":134,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":135,"author":{"gitId":"yeo-menghan"},"content":" // Handle the case where the format is invalid","lastModifiedDate":"2023-10-09"},{"lineNumber":136,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Invalid question format, please edit this question via the edit function\");","lastModifiedDate":"2023-10-09"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":138,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":139,"author":{"gitId":"yeo-menghan"},"content":" System.out.print(\" Your Answer: \");","lastModifiedDate":"2023-10-09"},{"lineNumber":140,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":141,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":142,"author":{"gitId":"lisizhuang-0121"},"content":" public void showInvalidCommandHelp(String feedback) {","lastModifiedDate":"2023-10-12"},{"lineNumber":143,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":144,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":145,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"yeo-menghan"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":95,"StevenGX12":17,"James-Hong-Jey":3,"yeo-menghan":30,"lisizhuang-0121":5}},{"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.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"public class CommandDeleteTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" private Parser parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" private Ui ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-25"},{"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":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-25"},{"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":" assert expectedOutput !\u003d null : \"Expected output should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(expectedOutput + \"\\n\" +actualOutput);","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","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":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with out-of-bound index","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" void testDeleteOutOfBoundIndex() {","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(-1);","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-21"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with invalid type index","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" void testDeleteInvalidTypeIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(\"delete test\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with missing index","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" void testDeleteMissingIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandDelete.MISSING_INDEX_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":" CommandDelete.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(\"delete\").executeCommand(ui, mockStorage, questionList);;","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" // /**","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" // * Test deleting with valid index","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":" // * */","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" void testDeleteValidIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have deleted the following question \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"lisizhuang-0121"},"content":" \" [S][X] Question1 / Answer1 | Mod1 | NORMAL\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":" \" Now you have 3 questions in the list! UWU\";","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(1);","lastModifiedDate":"2023-10-21"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":9,"StevenGX12":88,"James-Hong-Jey":4,"lisizhuang-0121":11}},{"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":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"public class CommandEditTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" private static MockStorage mockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" @BeforeAll","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" public static void setQuestionList(@TempDir Path tempDir) {","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question4 / Answer4 / Mod4 / NORMAL\" };","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","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":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with out-of-bound index","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" void testEditOutOfBoundIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit -1 /description NewDescription\";","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" }","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":" * Test editing with non-integer index","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" void testEditNonIntIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit abc /description NewDescription\";","lastModifiedDate":"2023-10-26"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with blank description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" void testEditBlankDes(){","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandEdit.MISSING_KEYWORD_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 1 /description \";","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled answer and blank description","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" void testEditBlankAns(){","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandEdit.MISSING_KEYWORD_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 1 /answer \";","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","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":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and blank answer","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":" void testEditNoIndex(){","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandEdit.MISSING_INDEX_MSG.strip() + CommandEdit.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit \";","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" * Test editing with filled description and answer","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" * */","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":" void testEditValidDescription(){","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" \" [S][X] NewDescription / Answer3 | Mod3 | NORMAL\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 3 /description NewDescription\";","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"StevenGX12"},"content":" void testEditValidAnswer(){","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"StevenGX12"},"content":" \" [S][] Question4 / NewAnswer | Mod4 | NORMAL\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"StevenGX12"},"content":" String userInput \u003d \"edit 4 /answer NewAnswer\";","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(userInput).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":98,"StevenGX12":29,"James-Hong-Jey":5,"lisizhuang-0121":15}},{"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":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":"public class CommandFindTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" private static MockStorage mockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" @BeforeAll","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" public static void setQuestionList(@TempDir Path tempDir) {","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" \"short Question4 / Answer4 / Mod4 / NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" };","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(3, showMessage);","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":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","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":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"StevenGX12"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" assert expectedOutput !\u003d null : \"Expected output should not be null\";","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" }","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":" * Test finding with no criteria","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" void testFindNoCriteria() {","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandFind.MISSING_CRITERIA_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-26"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no keyword","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoKeyword() {","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandFind.MISSING_KEYWORD_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" CommandFind.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find /description\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with matches","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionWithMatches() {","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"lisizhuang-0121"},"content":" + \" 1: [S][X] Question1 / Answer1 | Mod1 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"lisizhuang-0121"},"content":" + \" 2: [S][] Question2 / Answer2 | Mod2 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":" + \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" + \" 4: [S][] Question4 / Answer4 | Mod4 | NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find /description Question\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no matches","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoMatches() {","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":" + \" No results found :\u003c Check your keyword is correct?\";","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(\"find /description no matches\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" * Test finding by module with no keyword","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" void testFindModuleNoKeyword() {","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandFind.MISSING_KEYWORD_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":" CommandFind.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(\"find /module\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput.strip());","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"StevenGX12"},"content":" * Test finding by module with matches","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"StevenGX12"},"content":" */ ","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"StevenGX12"},"content":" void testFindModuleWithMatches() {","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"StevenGX12"},"content":" + \" 1: [S][X] Question1 / Answer1 | Mod1 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"StevenGX12"},"content":" + \" 2: [S][] Question2 / Answer2 | Mod2 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"StevenGX12"},"content":" + \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\"","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"StevenGX12"},"content":" + \" 4: [S][] Question4 / Answer4 | Mod4 | NORMAL\";","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(\"find /module Mod\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"StevenGX12"},"content":" * Test finding by module with no matches","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"StevenGX12"},"content":" void testFindModuleNoMatches() {","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\"","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"StevenGX12"},"content":" + \" No results found :\u003c Check your module is correct?\";","lastModifiedDate":"2023-10-26"},{"lineNumber":153,"author":{"gitId":"StevenGX12"},"content":" Parser.parseCommand(\"find /module no matches\").executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":154,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-26"},{"lineNumber":155,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":156,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":10,"StevenGX12":112,"James-Hong-Jey":2,"lisizhuang-0121":32}},{"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":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","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":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" * Test if help command displays the correct output","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" * */","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" public void testHelpCommand() {","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" String expectedOutput\u003d \" Here are the list of commands you can use:\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":" \" 1. help - shows the list of commands you can use\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":" \" 2. short [question]/[answer]/[module]/[difficulty] - adds a short answer question and \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":" \"its answer to the list,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":" \" 3. list - shows the list of questions and answers,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"James-Hong-Jey"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":" \" 6. find /[module] - displays all questions that belong to the specified module,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"James-Hong-Jey"},"content":" \" 7. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"James-Hong-Jey"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":" \" 8. edit [question number] /answer [answer] - edits the answer to the question with \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":" \"the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":" \" 9. start /[quiz mode] [start details] /[qn mode] - \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":" \"starts the quiz with option for /module or /all and /random or /normal,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"James-Hong-Jey"},"content":" \" 10. shuffle - shuffle quiz questions to a random order,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"James-Hong-Jey"},"content":" \" 11. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"James-Hong-Jey"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" \" 12. bye - exits the program\";","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" CommandHelp help \u003d new CommandHelp();","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":" help.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" // MockStorage class for testing, using in-data memory","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" super(filepath);","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-18"},{"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":" public String loadData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" return \"\";","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" public void clearData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":" questions.clear();","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":1,"StevenGX12":93,"James-Hong-Jey":19,"lisizhuang-0121":3}},{"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":"lisizhuang-0121"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"public class CommandListTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" private static MockStorage mockStorage;","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" public void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output.","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same.","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" }","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":" * Test display of empty question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" void testListEmptyList(){","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"No questions found! Time to add some OWO\";","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","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":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" * with one unmarked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"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 testListOneUnmarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][] Question / Answer | Mod1 | EASY\";","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question\", \"Answer\", \"Mod1\",","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.EASY, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" String actualOutput \u003d outputStreamCaptor.toString().strip();","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * with one marked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" void testListOneMarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question\", \"Answer\", \"Mod1\",","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.HARD, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.markQuestionAsDone(1, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][X] Question / Answer | Mod1 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" * with a mix of marked and unmarked SHORTANSWER questions.","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" void testListMixedShorts(){","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question1\", \"Answer1\", \"Mod1\",","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.HARD, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question2\", \"Answer2\", \"Mod2\",","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.HARD, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question3\", \"Answer3\", \"Mod3\",","lastModifiedDate":"2023-10-26"},{"lineNumber":94,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.NORMAL, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.addShortAnswerQn(\"Question4\", \"Answer4\", \"Mod4\",","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty.EASY, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":97,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.markQuestionAsDone(1, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":98,"author":{"gitId":"lisizhuang-0121"},"content":" questionList.markQuestionAsDone(3, false);","lastModifiedDate":"2023-10-26"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" \"1: [S][X] Question1 / Answer1 | Mod1 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" \" 2: [S][] Question2 / Answer2 | Mod2 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" \" 4: [S][] Question4 / Answer4 | Mod4 | EASY\" ;","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":85,"lisizhuang-0121":24}},{"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":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" private QuestionList questionList;","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":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","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":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * Test marking without question index and difficulty level","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNoIndexNoDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff\";","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandMarkDifficulty.MISSING_INDEX_MSG.strip()","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" + CommandMarkDifficulty.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" * Test marking without question difficulty to assign","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNoDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1\";","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandMarkDifficulty.MISSING_DIFFICULTY_MSG.strip();","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with out-of-bound index","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffOutOfBoundIndex(){","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff -1 NORMAL\";","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG.strip();","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with non-integer index","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNonIntIndex(){","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff ?@!# NORMAL\";","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_INTEGER_INDEX_MSG.strip();","lastModifiedDate":"2023-10-27"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question non-existent difficulty level","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffWrongDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 ???\";","lastModifiedDate":"2023-10-27"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d Ui.INVALID_QUESTION_DIFFICULTY_MSG.strip()","lastModifiedDate":"2023-10-27"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" .replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question multiple difficulty levels","lastModifiedDate":"2023-10-27"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-27"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffMultipleDifficulty(){","lastModifiedDate":"2023-10-27"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 NORMAL hard EASY\";","lastModifiedDate":"2023-10-27"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandMarkDifficulty.TOO_MANY_ARGUMENTS_MSG.strip()","lastModifiedDate":"2023-10-27"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" + CommandMarkDifficulty.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question same difficulty as its current one","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffRepeatedDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 NORMAL\";","lastModifiedDate":"2023-10-27"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Question is already set as normal ! No changes made!\";","lastModifiedDate":"2023-10-27"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question different, correct difficulty level","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffCorrectDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 2 HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"lisizhuang-0121"},"content":" String expectedOutput \u003d \"Roger that! I have marked the following question as hard \u003ew\u003c !\" +","lastModifiedDate":"2023-10-26"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] Question2 / Answer2 | Mod2 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"spinoandraptos":158,"James-Hong-Jey":4,"lisizhuang-0121":5}},{"path":"src/test/java/quizhub/command/CommandStartTest.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":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.MockUi;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":"public class CommandStartTest {","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yeo-menghan"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yeo-menghan"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" private Ui ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" actualOutput \u003d actualOutput.replace(\"\\r\", \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" actualOutput \u003d actualOutput.replace(\"\\n\", \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" actualOutput \u003d actualOutput.replace(System.lineSeparator(), \"\");","lastModifiedDate":"2023-10-27"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" @Nested","lastModifiedDate":"2023-10-27"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" public class UninitialisedQnListBlock {","lastModifiedDate":"2023-10-27"},{"lineNumber":41,"author":{"gitId":"yeo-menghan"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yeo-menghan"},"content":" public void setUp(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yeo-menghan"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yeo-menghan"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":" public void testStartQuizWithNoQuestions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all /random\";","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"No questions found! Add questions before starting the quiz.\";","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz when question list is empty","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" @Nested","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" public class InitialisedQnListWithErrorBlock {","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" * Create a new blank question list","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d {\"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\"};","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz without specifying quiz mode","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizNoQuizMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start\";","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QUIZ_MODE_MSG.strip().replace(System.lineSeparator(), \"\")","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":113,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode without start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeNoDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all\";","lastModifiedDate":"2023-10-27"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QN_MODE_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode with start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeWithDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all details\";","lastModifiedDate":"2023-10-27"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QN_MODE_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode without start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeNoDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module\";","lastModifiedDate":"2023-10-27"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_START_DETAILS.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":148,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with start details without question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithDetailsNoQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module cs2113\";","lastModifiedDate":"2023-10-27"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_QN_MODE_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":160,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":161,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode without start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeNoDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module /random\";","lastModifiedDate":"2023-10-27"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.MISSING_START_DETAILS.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode with excessive arguments at the back","lastModifiedDate":"2023-10-27"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeWithDetailsWithQnModeTooManyArguments() {","lastModifiedDate":"2023-10-27"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all Mod2 /normal random\";","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.TOO_MANY_ARGUMENTS_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":181,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":182,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":183,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":184,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with excessive arguments at the back","lastModifiedDate":"2023-10-27"},{"lineNumber":186,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":187,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithDetailsWithQnModeTooManyArguments() {","lastModifiedDate":"2023-10-27"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module Mod2 /random normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":190,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d CommandStart.TOO_MANY_ARGUMENTS_MSG.strip() + CommandStart.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-27"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":192,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":193,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-27"},{"lineNumber":194,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":195,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":196,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":197,"author":{"gitId":"spinoandraptos"},"content":" @Nested","lastModifiedDate":"2023-10-27"},{"lineNumber":198,"author":{"gitId":"spinoandraptos"},"content":" public class InitialisedQnListWithoutErrorBlock {","lastModifiedDate":"2023-10-27"},{"lineNumber":199,"author":{"gitId":"spinoandraptos"},"content":" MockUi mockUi;","lastModifiedDate":"2023-10-27"},{"lineNumber":200,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-27"},{"lineNumber":201,"author":{"gitId":"spinoandraptos"},"content":" public void setQuestionList(@TempDir Path tempDir) {","lastModifiedDate":"2023-10-27"},{"lineNumber":202,"author":{"gitId":"spinoandraptos"},"content":" // Create a temporary file in the tempDir","lastModifiedDate":"2023-10-27"},{"lineNumber":203,"author":{"gitId":"spinoandraptos"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-27"},{"lineNumber":204,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString()); // Pass the temporary file path","lastModifiedDate":"2023-10-27"},{"lineNumber":205,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-27"},{"lineNumber":206,"author":{"gitId":"spinoandraptos"},"content":" mockUi \u003d new MockUi(questionList, mockStorage);","lastModifiedDate":"2023-10-27"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d {\"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":208,"author":{"gitId":"spinoandraptos"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":209,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"spinoandraptos"},"content":" \"short Question4 / Answer4 / Mod4/ NORMAL\"};","lastModifiedDate":"2023-10-27"},{"lineNumber":211,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-27"},{"lineNumber":212,"author":{"gitId":"spinoandraptos"},"content":" Parser.parseCommand(question).executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":213,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":214,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":215,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":216,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode without start details with question mode random","lastModifiedDate":"2023-10-27"},{"lineNumber":217,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":218,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":219,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeNoDetailsWithRandomQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":220,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer1\");","lastModifiedDate":"2023-10-27"},{"lineNumber":221,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer2\");","lastModifiedDate":"2023-10-27"},{"lineNumber":222,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer3\");","lastModifiedDate":"2023-10-27"},{"lineNumber":223,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer4\");","lastModifiedDate":"2023-10-27"},{"lineNumber":224,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":225,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":226,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":227,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 4/4\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":228,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":229,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":230,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":231,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in all mode with start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":232,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":233,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":234,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizAllModeWithDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":235,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer1\");","lastModifiedDate":"2023-10-27"},{"lineNumber":236,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer8\");","lastModifiedDate":"2023-10-27"},{"lineNumber":237,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer3\");","lastModifiedDate":"2023-10-27"},{"lineNumber":238,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer2\");","lastModifiedDate":"2023-10-27"},{"lineNumber":239,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /all details /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":240,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":241,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 2/4\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":243,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":244,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":245,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":247,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":248,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":249,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer1\");","lastModifiedDate":"2023-10-27"},{"lineNumber":250,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module Mod3 /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":251,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":252,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":253,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 0/1\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":254,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":255,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":256,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-27"},{"lineNumber":257,"author":{"gitId":"spinoandraptos"},"content":" * Test starting quiz in module mode with multiple start details with question mode","lastModifiedDate":"2023-10-27"},{"lineNumber":258,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-27"},{"lineNumber":259,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-27"},{"lineNumber":260,"author":{"gitId":"spinoandraptos"},"content":" public void testStartQuizModuleModeWithMultipleDetailsWithQnMode() {","lastModifiedDate":"2023-10-27"},{"lineNumber":261,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer3\");","lastModifiedDate":"2023-10-27"},{"lineNumber":262,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer4\");","lastModifiedDate":"2023-10-27"},{"lineNumber":263,"author":{"gitId":"spinoandraptos"},"content":" mockUi.setUserInput(\"Answer2\");","lastModifiedDate":"2023-10-27"},{"lineNumber":264,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"start /module Mod3 Mod1 Mod2 /normal\";","lastModifiedDate":"2023-10-27"},{"lineNumber":265,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":266,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-27"},{"lineNumber":267,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" Your score: 2/3\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-27"},{"lineNumber":268,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":269,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":270,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":271,"author":{"gitId":"yeo-menghan"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spinoandraptos":223,"yeo-menghan":48}},{"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":"lisizhuang-0121"},"content":"import quizhub.command.CommandDelete;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.CommandInvalid;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":"class ParserTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" private Parser parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"James-Hong-Jey"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" public void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" }","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"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" * Test command parser with empty commands (invalid commands)","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_emptyCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] emptyInputs \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" final String resultMessage \u003d Ui.INVALID_COMMAND_MSG + System.lineSeparator() + Ui.INVALID_COMMAND_FEEDBACK;","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_invalidIntegerCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] invalidIntegers \u003d {","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete system32\",","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete 1111111111111111111111111111111111111111111111111\"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" final String resultMessage \u003d Ui.INVALID_INTEGER_INDEX_MSG +","lastModifiedDate":"2023-10-27"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" System.lineSeparator() + CommandDelete.INVALID_FORMAT_MSG;","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, invalidIntegers);","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" /*","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"James-Hong-Jey"},"content":" @Test","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" void test_parseCommand_commandShortAnswer() {","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"James-Hong-Jey"},"content":" final String validInput \u003d \"short What\u0027s 9 + 10 / 21\";","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"James-Hong-Jey"},"content":" CommandShortAnswer result \u003d parseAndAssertCommandType(validInput, CommandShortAnswer.class);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"James-Hong-Jey"},"content":" assertEquals(\"short What\u0027s 9 + 10 / 21\", result.getUserInput());","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"lisizhuang-0121"},"content":" * Test list of INVALID inputs and validate their feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"lisizhuang-0121"},"content":" * @param feedback The target feedback message for invalid command","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"lisizhuang-0121"},"content":" * @param inputs The invalid inputs that would generate the same feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseAndAssertIncorrectWithMessage(String feedback, String[] inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" final CommandInvalid result \u003d parseAndAssertCommandType(input, CommandInvalid.class);","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(feedback, result.feedback);","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" * Parses and tests the command type returned","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":" * @param input The command input to be tested","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":" * @param expectedClass The expected command class","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" private \u003cT extends Command\u003e T parseAndAssertCommandType(String input, Class\u003cT\u003e expectedClass) {","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" final Command result \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":" assertTrue(result.getClass().isAssignableFrom(expectedClass));","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" return (T) result;","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"spinoandraptos":8,"James-Hong-Jey":10,"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":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":" boolean showMessage \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" QuestionList qns \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" qns.addShortAnswerQn(\"Question\", \"Answer\",","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" \"Mod1\", Question.QnDifficulty.NORMAL, true);","lastModifiedDate":"2023-10-26"},{"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":6,"James-Hong-Jey":31,"lisizhuang-0121":2}},{"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}},{"path":"src/test/java/quizhub/ui/MockUi.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.ui;","lastModifiedDate":"2023-10-27"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-27"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-27"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-10-27"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Queue;","lastModifiedDate":"2023-10-27"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class MockUi extends Ui {","lastModifiedDate":"2023-10-27"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" private final Queue\u003cString\u003e userInputQueue \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-10-27"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private String lastDisplayedMessage;","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" public MockUi(QuestionList tasks, MockStorage mockStorage) {","lastModifiedDate":"2023-10-27"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" super(mockStorage, tasks);","lastModifiedDate":"2023-10-27"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public void setUserInput(String input) {","lastModifiedDate":"2023-10-27"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" userInputQueue.add(input);","lastModifiedDate":"2023-10-27"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-27"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" if (userInputQueue.isEmpty()) {","lastModifiedDate":"2023-10-27"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" throw new RuntimeException(\"No more user inputs provided.\");","lastModifiedDate":"2023-10-27"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" return userInputQueue.poll();","lastModifiedDate":"2023-10-27"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-27"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" lastDisplayedMessage \u003d message;","lastModifiedDate":"2023-10-27"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" public String getLastDisplayedMessage() {","lastModifiedDate":"2023-10-27"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" return lastDisplayedMessage;","lastModifiedDate":"2023-10-27"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-27"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-27"}],"authorContributionMap":{"spinoandraptos":35}}] diff --git a/AY2324S1-CS2113-W12-1_tp_master/commits.json b/AY2324S1-CS2113-W12-1_tp_master/commits.json index 6501fbd..b63eac4 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":{}},{"hash":"45183848877790c1b25b0c46e295570a906149a1","isMergeCommit":false,"messageTitle":"Added Junit testing for command to mark question difficulty, abstracted out class MockStorage for reuse during testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":186,"deletions":35}}},{"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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"7412057e77ee27c74055b20055258a24b3543468","isMergeCommit":true,"messageTitle":"Merge branch \u0027junit-mark-difficulty\u0027","messageBody":"# Conflicts:\n#\tsrc/test/java/quizhub/command/CommandDeleteTest.java\n#\tsrc/test/java/quizhub/command/CommandMarkTest.java\n#\tsrc/test/java/quizhub/storage/MockStorage.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"076594dc7c3f40cb8ba6d368a569ffb71dd4b313","isMergeCommit":true,"messageTitle":"Developer guide - added parser details","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"30d21e663aad83726249ee80c1a679e99a243ab1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-RandomQnsStart","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"65895a275aad73ce81415e2a417c0afbfdc7ef9d","isMergeCommit":true,"messageTitle":"Merge pull request #66 from yeo-menghan/branch-RandomQnsStart","messageBody":"Clarify details for Start command in parser","fileTypesAndContributionMap":{}},{"hash":"784e934163a5651180b64ecc00be36a14ec45b1b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into developer-guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c795434676e4e1e54667589b68086f6bd70a0145","isMergeCommit":true,"messageTitle":"Merge pull request #67 from spinoandraptos/developer-guide","messageBody":"Developer guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"eaec1cdac145b8d2e9350b6a523da42ed8ee5c11","isMergeCommit":false,"messageTitle":"Optimised question difficulty processing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":23}}},{"hash":"8460f898f85d5c7bee4242cf0ff835dc825c7fe4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"b501674b35695192c02516c01ccfbef2348851e0","isMergeCommit":true,"messageTitle":"Merge pull request #77 from spinoandraptos/master","messageBody":"Optimised question difficulty interpreting","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"9d20f3f3662467dfe485c090a4f5c26ca0bfb17e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"24e0b27d25c307fb92fea9460feba9f91b0c4cb1","isMergeCommit":false,"messageTitle":"Abstracted command parsing for CommandMarkDifficulty and CommandStart into the Parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":85,"deletions":62}}},{"hash":"e698226b035dc121af0a2c7b14823f9cbc231e8c","isMergeCommit":false,"messageTitle":"Documentation fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"f028743ca528591025ae81dbe26ffbf59ad1adc5","isMergeCommit":false,"messageTitle":"Checkstyle fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"1552d4abd894466393d25f95f969781e366c8d51","isMergeCommit":true,"messageTitle":"Merge pull request #96 from spinoandraptos/parser-refactoring","messageBody":"Abstracted command parsing from CommandMarkDifficulty and CommandStart into Parser class","fileTypesAndContributionMap":{}},{"hash":"ca9052578ebab34d31bd32ccc32b0b473ddb9d88","isMergeCommit":false,"messageTitle":"Fixed UI display errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-27","commitResults":[{"hash":"a9353f69c3c628907557794a4f0327a8c6771b4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95dc70f0db3ad00e68e2588fe735bc468849f293","isMergeCommit":false,"messageTitle":"Updated Junit tests for CommandStart and CommandMarkDifficulty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":93,"deletions":71},"other":{"insertions":1,"deletions":0},"test-code":{"insertions":339,"deletions":208}}},{"hash":"fb19b6801138c5d05e73c89c3b287c33ccd1dbb7","isMergeCommit":false,"messageTitle":"Fixed Checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"87bc426b2f8fdc90be5341f93cbe2f05a32beca9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0d8604dfcb65893f874a233671b17eafcf524ae7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into parser-refactoring-test","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"493de44748acceba4c70d6a7cc1778f3e05874f7","isMergeCommit":false,"messageTitle":"Fixed failing tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":9}}},{"hash":"85a94278750add285f2cc2d2e41bdcb66aabf68c","isMergeCommit":false,"messageTitle":"Fixed failing tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"314abaca8eba6369318b08a25edda2275731ccb4","isMergeCommit":true,"messageTitle":"Merge pull request #101 from spinoandraptos/parser-refactoring-test","messageBody":"Updated Junit tests for CommandStart and CommandMarkDifficulty","fileTypesAndContributionMap":{}},{"hash":"3dce94b26f7ab31c447340028c258c4b45906dba","isMergeCommit":true,"messageTitle":"Merge branch \u0027parser-refactoring-test\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d172b15fc19a1478c724f92be44f77874d783090","isMergeCommit":false,"messageTitle":"Updated parser parseCommand sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"69d8a0b9023f6dd1aa697f4a7e67f880b52bffb9","isMergeCommit":true,"messageTitle":"Merge pull request #108 from spinoandraptos/master","messageBody":"Updated Parser parseCommand Sequence Diagram ","fileTypesAndContributionMap":{}},{"hash":"28715538d00b192887adbc20a2ce55b394997903","isMergeCommit":false,"messageTitle":"Added DG appendix and fixed minor formatting issues","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":34}}},{"hash":"baf19adafb423d5f205aa3495809b93b30a84ed0","isMergeCommit":false,"messageTitle":"Added command edit and markdiff to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":80,"deletions":33}}},{"hash":"e610b2a7fd4591750f20e979b8444b4e0afc2978","isMergeCommit":false,"messageTitle":"Added command edit and markdiff to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":146,"deletions":109}}},{"hash":"220d1220da28ad7bc6e42a01dc39b1fecc83084b","isMergeCommit":true,"messageTitle":"Merge pull request #111 from spinoandraptos/user-guide","messageBody":"Added command edit and markdiff to UG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"5f28e1fe46eb60942bc947379ad9dc83b5fccab4","isMergeCommit":true,"messageTitle":"Merge branch \u0027user-guide\u0027","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n#\tdocs/UserGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"ec3e1cb9843b15b97dfbc52021f2a4f161060bdd","isMergeCommit":false,"messageTitle":"UG minor format issue","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0ba89c3b74848629c143b227becaed703c32f69e","isMergeCommit":false,"messageTitle":"Fixed DG merge conflict issues","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":36}}},{"hash":"f441f0a5adbc20852fb3830ec3a2a063f3d68072","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79ec1e5ef98426f93fb6ab8b5e2286b01b14e109","isMergeCommit":false,"messageTitle":"Edited command output documentation for commandShort","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":5}}},{"hash":"04b1b0e7da9288bb64b1dd039643b78edab86cec","isMergeCommit":true,"messageTitle":"Merge pull request #115 from spinoandraptos/master","messageBody":"Fixed some UG and DG formatting issues ","fileTypesAndContributionMap":{}},{"hash":"a61da160651908eb7593de701a261cc1f07bc232","isMergeCommit":false,"messageTitle":"Fixed UG command output diplay formatting issue","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":27,"deletions":27}}},{"hash":"5feab10fa34b9586be80bcaca1c9e6d4a93a3be9","isMergeCommit":false,"messageTitle":"Fixed UG command output formatting issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":14,"deletions":1}}},{"hash":"575c352513ddd1675b3338b80dad6c6b9796d616","isMergeCommit":true,"messageTitle":"Merge pull request #116 from spinoandraptos/master","messageBody":"Fixed UG command output display formatting","fileTypesAndContributionMap":{}},{"hash":"d25ebf8db4dae0634147f8c4ac4edc916a113dcf","isMergeCommit":false,"messageTitle":"Fixed UG help command description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":6}}},{"hash":"475c4fb2e8b2c08a0121af819ff6d8447125ca7c","isMergeCommit":true,"messageTitle":"Merge pull request #117 from spinoandraptos/master","messageBody":"Fixed UG help command description","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}}}]},{"date":"2023-10-24","commitResults":[{"hash":"2f6f59f0c13ee0b29ac45e88736757b5fa17fb33","isMergeCommit":false,"messageTitle":"Add Storage component to developer guide Add several assertions in different classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0},"docs":{"insertions":47,"deletions":0},"test-code":{"insertions":2,"deletions":0}}},{"hash":"50b67f23f9b68a2f68c2912813b942e27c23d08a","isMergeCommit":false,"messageTitle":"Update developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"24a0b4adcea8281b87de99a9697dcf53dbfec03f","isMergeCommit":true,"messageTitle":"Merge pull request #71 from StevenGX12/branch-developer-guide","messageBody":"Update developer guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"a42dacee2795f4d1a17444b40889359e7d35a9dc","isMergeCommit":false,"messageTitle":"Add UI component of developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":0}}},{"hash":"6ce8ba86521d5a3db6dbc61b344d7ebbb2ca663b","isMergeCommit":false,"messageTitle":"Refactor parsing elements from CommandEdit to Parser Fixed tests for CommandFind and CommandEdit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":41},"test-code":{"insertions":80,"deletions":22}}},{"hash":"b0aafa75f406e3f84e19146b4783ce959f15f7a6","isMergeCommit":false,"messageTitle":"Fixed bug in CommandEditTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"32dd7db1a0dc748db256c8c676da8bc9e5b9137e","isMergeCommit":true,"messageTitle":"Merge pull request #97 from StevenGX12/branch-code-refactor","messageBody":"Refactor parsing elements from CommandEdit to Parser\r\nFixed tests for CommandFind and CommandEdit","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"54baf920c7a7fdbe6e96545125fd0369ab6de711","isMergeCommit":false,"messageTitle":"Add user guide for \u0027delete\u0027 and \u0027find\u0027 commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":38,"deletions":0}}},{"hash":"932ab82eb97ae8c9f48fcf4f997751f94ce864f6","isMergeCommit":true,"messageTitle":"Merge pull request #112 from StevenGX12/branch-user-guide","messageBody":"Add user guide for \u0027delete\u0027 and \u0027find\u0027 commands","fileTypesAndContributionMap":{}}]}],"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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"394b2be754c0261ccd2cabd51b5abc4e12ec3159","isMergeCommit":false,"messageTitle":"Update parser help for start command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":3}}},{"hash":"d276d02dc73ea4d49ec352125f1ec18acd21f6a8","isMergeCommit":false,"messageTitle":"Clarify definition of Command Shuffle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"fb00c8cb043f6bc35a76b77c4bfeb4a13af5445c","isMergeCommit":false,"messageTitle":"implement /normal and /random to startCommand to randomise or sequence questions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":4}}},{"hash":"a1f98f18b169094bf054a4639d0ec7584320f4a1","isMergeCommit":false,"messageTitle":"Refactor executeCommand in CommandStart","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":32}}},{"hash":"36f65e810a94fabeabae270a05b02510a9d3761f","isMergeCommit":false,"messageTitle":"Extend short command to be clear","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-24","commitResults":[{"hash":"cca0cee732367b417feade88a0400aca22811735","isMergeCommit":false,"messageTitle":"Clarify details for Start command in parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"48c585a348444dc89362efbb490d443a9ff96997","isMergeCommit":false,"messageTitle":"Add /random to CommandStart","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"docs":{"insertions":0,"deletions":2}}},{"hash":"bfa0dbaf71d34f67f1d77516511602d6cd51252a","isMergeCommit":true,"messageTitle":"Reimplement /random to CommandStart to resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"497a8678a512fec18759da039c2146823b2606de","isMergeCommit":false,"messageTitle":"Convert /random feature from if-else to switch","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":6}}},{"hash":"e2790379dd843d533a2efd077f72a77374fda7f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-RandomQnsStart","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"230a9be8548c0e1949800de7a700a91f017001c9","isMergeCommit":true,"messageTitle":"Merge pull request #68 from yeo-menghan/branch-RandomQnsStart","messageBody":"Branch random qns start","fileTypesAndContributionMap":{}},{"hash":"ee3a30e89e97a885127654cfb9922b8b2e1e7dee","isMergeCommit":false,"messageTitle":"Add StartCommand uml and StartCommand documentation to DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":66,"deletions":36}}},{"hash":"74667af8a90c7b0a99ecf14324df5242abe80b83","isMergeCommit":true,"messageTitle":"Merge pull request #69 from yeo-menghan/branch-CommandStartUML","messageBody":"Add StartCommand uml and StartCommand documentation to DeveloperGuide.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"07f3f38d233e40fb27b2343eca1cc93f006e4912","isMergeCommit":true,"messageTitle":"Merge pull request #89 from lisizhuang-0121/master","messageBody":"Fix tests in Delete, Edit, Find, List, and Start Test","fileTypesAndContributionMap":{}},{"hash":"edc42130ed23db3fc87396459b920bb24efac7a7","isMergeCommit":false,"messageTitle":"Remove \\r from failed test cases to achieve 100% test cases pass rate","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":8}}},{"hash":"a6ae45406e4159fb94ec01751c78d5e35b9cb5e3","isMergeCommit":true,"messageTitle":"Merge pull request #90 from yeo-menghan/branch-TestCI","messageBody":"Remove \\r from failed test cases to achieve 100% test cases pass rate","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"d849948bec9bff5ec4ec88243682d9bf7b71048f","isMergeCommit":false,"messageTitle":"Init CommandStartTest2","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":146,"deletions":0}}},{"hash":"67c2f966ef8db9da9605b3c496f25e2ae9bf85bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-CommandStartTest2","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"28c555440691ba33b6669122a0bb45ff947a4867","isMergeCommit":false,"messageTitle":"Add UG for Introduction and /help command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":33,"deletions":12},"test-code":{"insertions":0,"deletions":147}}},{"hash":"b18c8df13adb3ec8882607606e40397fa1a9562a","isMergeCommit":false,"messageTitle":"Add UG for /list and /short commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":0}}},{"hash":"e82b7aba052bf90723fb4bd74c79991d19846fc8","isMergeCommit":false,"messageTitle":"Add UG for /start and /shuffle commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":38,"deletions":0}}},{"hash":"9e89a05f90c995aeaf1f30e7123e5d0e6b4dfba5","isMergeCommit":false,"messageTitle":"Edit feature list in UG and add Command Cheatsheet in UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":47,"deletions":41}}},{"hash":"7570f4b92f4a5c86562d382c0e05346e5e0f5480","isMergeCommit":true,"messageTitle":"Merge pull request #99 from yeo-menghan/branch-UG","messageBody":"Branch UG init","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":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"8eff0aa37130c992176747b7492a81e7b467881f","isMergeCommit":true,"messageTitle":"Merge pull request #64 from yeo-menghan/branch-RandomQnsStart","messageBody":"Branch random qns start","fileTypesAndContributionMap":{}},{"hash":"4c31e670091d8b8623045ef038dd0677faa4c706","isMergeCommit":false,"messageTitle":"Revert \"Branch random qns start\"","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":50}}},{"hash":"75b8cefa4e66396db41a38fe53c5fca5c56a331b","isMergeCommit":true,"messageTitle":"Merge pull request #65 from AY2324S1-CS2113-W12-1/revert-64-branch-RandomQnsStart","messageBody":"Revert \"Branch random qns start\"","fileTypesAndContributionMap":{}},{"hash":"7a52c4a396e0e4f2067745f743607d01275b11c4","isMergeCommit":false,"messageTitle":"Add Short Command and Find Command to Dev Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":30,"deletions":0}}},{"hash":"3f850e1678e0167cd2c3c3868c7e601a154824d2","isMergeCommit":true,"messageTitle":"Merge pull request #70 from James-Hong-Jey/master","messageBody":"Add Short Command and Find Command to Dev Guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"ebf475c90b99fe9d6d3aa92bb985a9413c5147b0","isMergeCommit":false,"messageTitle":"Add Short Command diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":0}}},{"hash":"52e9f4189576a52196d287369f67fd5595f54dec","isMergeCommit":true,"messageTitle":"Merge pull request #72 from James-Hong-Jey/master","messageBody":"Add Short Command Diagram to DG","fileTypesAndContributionMap":{}},{"hash":"6a2bd99d3c3a5fcd38caec28c6549910dc9af1fa","isMergeCommit":false,"messageTitle":"Fix test files style","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":14}}},{"hash":"0aa3c28f9bf7bd41d534d1aae5e3e7f6bc391b31","isMergeCommit":false,"messageTitle":"Fix 1 Junit, 2 left to fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":34},"test-code":{"insertions":39,"deletions":0}}},{"hash":"5e4abb7ed5853f686f424aadfb582c960d75f4a0","isMergeCommit":true,"messageTitle":"Merge pull request #76 from James-Hong-Jey/master","messageBody":"Pass CI tests halfway","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"e67b9800fdbbd75a51dc6ee413230fd6a6e50bf8","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":36},"test-code":{"insertions":5,"deletions":5}}},{"hash":"d43962c336a76536f2e5408e1c2171dce94e0f5d","isMergeCommit":true,"messageTitle":"Merge pull request #87 from StevenGX12/branch-developer-guide","messageBody":"Add UI component of developer guide","fileTypesAndContributionMap":{}},{"hash":"0c023f11f1f368f6fded9ef6509758a4cf8554a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5751d0bbd081e2f4d90d446cadacadd6c2425195","isMergeCommit":false,"messageTitle":"Attempt fix of edit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":1}}},{"hash":"67c4dd17ecf6911163fd11737ef539a04c918fdd","isMergeCommit":true,"messageTitle":"Merge pull request #88 from James-Hong-Jey/master","messageBody":"Fix Checkstyle","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":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"840bc8874c62cdae1635bb396c7472e5b92ea891","isMergeCommit":false,"messageTitle":"Update skeleton for parsing commands in Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":25},"test-code":{"insertions":1,"deletions":1}}},{"hash":"3de09345ce79e937fe1b28d8547c95d1c96799e4","isMergeCommit":false,"messageTitle":"Convert error messages in commands to public static","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":31}}},{"hash":"d3ef7652234fa173d82caf858b55059787f7c7d4","isMergeCommit":true,"messageTitle":"Merge pull request #80 from lisizhuang-0121/master","messageBody":"Refactor code in parser and commands","fileTypesAndContributionMap":{}},{"hash":"ce66fae4dcbdf87e7be7c760939543bf9c09b9e3","isMergeCommit":false,"messageTitle":"Update test for DELETE command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":5}}},{"hash":"6298b5e18132f5f793c53653f79c492abe4ef646","isMergeCommit":false,"messageTitle":"Refactor and move FIND command parsing to parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":39},"test-code":{"insertions":9,"deletions":1}}},{"hash":"491d4ea6282298abf9ad999247a115f48ac92c7b","isMergeCommit":true,"messageTitle":"Merge pull request #85 from lisizhuang-0121/master","messageBody":"Refactor code in command parsing and find command","fileTypesAndContributionMap":{}},{"hash":"aab6e922c577e387de591d9bbdd442e25d2185e2","isMergeCommit":false,"messageTitle":"Abstract function to create short answer question","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":76},"test-code":{"insertions":2,"deletions":0}}},{"hash":"e3f9ef91b2e39bf7748595322511426a06b03f63","isMergeCommit":false,"messageTitle":"Fix tests temporarily due to change in add question command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2},"test-code":{"insertions":21,"deletions":18}}},{"hash":"e1f6cf0c7f744be154bf2ed096925d28869d45d8","isMergeCommit":true,"messageTitle":"Merge pull request #86 from lisizhuang-0121/master","messageBody":"Modify Short Answer Question Command to use parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"0e0bdcaa0bfcfbe380db710e2c02ebde76472d8f","isMergeCommit":false,"messageTitle":"Fix tests in Delete, Edit, Find, List, and Start Test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":74,"deletions":60}}},{"hash":"47620310a4e57800b720b164b735f2745f03b751","isMergeCommit":false,"messageTitle":"Temporarily disable failed tests for refactoring","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":41,"deletions":41}}},{"hash":"c40c624bfa3912f4b168a06caa5e74576cb41707","isMergeCommit":false,"messageTitle":"Remove line seperators before assertion testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":36}}},{"hash":"d16ffcdc0e7dcac18b6be9842aaa91fa681cc3f7","isMergeCommit":true,"messageTitle":"Merge pull request #95 from lisizhuang-0121/master","messageBody":"Fix CI errors in assertion testing due to line seperators","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"spinoandraptos":{"docs":245,"functional-code":854,"test-code":670,"other":3},"StevenGX12":{"docs":117,"functional-code":127,"test-code":322},"yeo-menghan":{"docs":103,"functional-code":140,"test-code":48},"James-Hong-Jey":{"docs":50,"functional-code":311,"test-code":75},"lisizhuang-0121":{"docs":54,"functional-code":355,"test-code":154,"other":1}},"authorContributionVariance":{"spinoandraptos":95709.44,"StevenGX12":4508.729,"yeo-menghan":7601.7227,"James-Hong-Jey":19103.39,"lisizhuang-0121":48132.215},"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":"45183848877790c1b25b0c46e295570a906149a1","isMergeCommit":false,"messageTitle":"Added Junit testing for command to mark question difficulty, abstracted out class MockStorage for reuse during testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":186,"deletions":35}}},{"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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"7412057e77ee27c74055b20055258a24b3543468","isMergeCommit":true,"messageTitle":"Merge branch \u0027junit-mark-difficulty\u0027","messageBody":"# Conflicts:\n#\tsrc/test/java/quizhub/command/CommandDeleteTest.java\n#\tsrc/test/java/quizhub/command/CommandMarkTest.java\n#\tsrc/test/java/quizhub/storage/MockStorage.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"076594dc7c3f40cb8ba6d368a569ffb71dd4b313","isMergeCommit":true,"messageTitle":"Developer guide - added parser details","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"30d21e663aad83726249ee80c1a679e99a243ab1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-RandomQnsStart","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"65895a275aad73ce81415e2a417c0afbfdc7ef9d","isMergeCommit":true,"messageTitle":"Merge pull request #66 from yeo-menghan/branch-RandomQnsStart","messageBody":"Clarify details for Start command in parser","fileTypesAndContributionMap":{}},{"hash":"784e934163a5651180b64ecc00be36a14ec45b1b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into developer-guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c795434676e4e1e54667589b68086f6bd70a0145","isMergeCommit":true,"messageTitle":"Merge pull request #67 from spinoandraptos/developer-guide","messageBody":"Developer guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"eaec1cdac145b8d2e9350b6a523da42ed8ee5c11","isMergeCommit":false,"messageTitle":"Optimised question difficulty processing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":23}}},{"hash":"8460f898f85d5c7bee4242cf0ff835dc825c7fe4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"b501674b35695192c02516c01ccfbef2348851e0","isMergeCommit":true,"messageTitle":"Merge pull request #77 from spinoandraptos/master","messageBody":"Optimised question difficulty interpreting","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"9d20f3f3662467dfe485c090a4f5c26ca0bfb17e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"24e0b27d25c307fb92fea9460feba9f91b0c4cb1","isMergeCommit":false,"messageTitle":"Abstracted command parsing for CommandMarkDifficulty and CommandStart into the Parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":85,"deletions":62}}},{"hash":"e698226b035dc121af0a2c7b14823f9cbc231e8c","isMergeCommit":false,"messageTitle":"Documentation fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"f028743ca528591025ae81dbe26ffbf59ad1adc5","isMergeCommit":false,"messageTitle":"Checkstyle fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"1552d4abd894466393d25f95f969781e366c8d51","isMergeCommit":true,"messageTitle":"Merge pull request #96 from spinoandraptos/parser-refactoring","messageBody":"Abstracted command parsing from CommandMarkDifficulty and CommandStart into Parser class","fileTypesAndContributionMap":{}},{"hash":"ca9052578ebab34d31bd32ccc32b0b473ddb9d88","isMergeCommit":false,"messageTitle":"Fixed UI display errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-27","commitResults":[{"hash":"a9353f69c3c628907557794a4f0327a8c6771b4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95dc70f0db3ad00e68e2588fe735bc468849f293","isMergeCommit":false,"messageTitle":"Updated Junit tests for CommandStart and CommandMarkDifficulty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":93,"deletions":71},"other":{"insertions":1,"deletions":0},"test-code":{"insertions":339,"deletions":208}}},{"hash":"fb19b6801138c5d05e73c89c3b287c33ccd1dbb7","isMergeCommit":false,"messageTitle":"Fixed Checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"87bc426b2f8fdc90be5341f93cbe2f05a32beca9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0d8604dfcb65893f874a233671b17eafcf524ae7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into parser-refactoring-test","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"493de44748acceba4c70d6a7cc1778f3e05874f7","isMergeCommit":false,"messageTitle":"Fixed failing tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":9}}},{"hash":"85a94278750add285f2cc2d2e41bdcb66aabf68c","isMergeCommit":false,"messageTitle":"Fixed failing tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"314abaca8eba6369318b08a25edda2275731ccb4","isMergeCommit":true,"messageTitle":"Merge pull request #101 from spinoandraptos/parser-refactoring-test","messageBody":"Updated Junit tests for CommandStart and CommandMarkDifficulty","fileTypesAndContributionMap":{}},{"hash":"3dce94b26f7ab31c447340028c258c4b45906dba","isMergeCommit":true,"messageTitle":"Merge branch \u0027parser-refactoring-test\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d172b15fc19a1478c724f92be44f77874d783090","isMergeCommit":false,"messageTitle":"Updated parser parseCommand sequence diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"69d8a0b9023f6dd1aa697f4a7e67f880b52bffb9","isMergeCommit":true,"messageTitle":"Merge pull request #108 from spinoandraptos/master","messageBody":"Updated Parser parseCommand Sequence Diagram ","fileTypesAndContributionMap":{}},{"hash":"28715538d00b192887adbc20a2ce55b394997903","isMergeCommit":false,"messageTitle":"Added DG appendix and fixed minor formatting issues","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":34}}},{"hash":"baf19adafb423d5f205aa3495809b93b30a84ed0","isMergeCommit":false,"messageTitle":"Added command edit and markdiff to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":80,"deletions":33}}},{"hash":"e610b2a7fd4591750f20e979b8444b4e0afc2978","isMergeCommit":false,"messageTitle":"Added command edit and markdiff to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":146,"deletions":109}}},{"hash":"220d1220da28ad7bc6e42a01dc39b1fecc83084b","isMergeCommit":true,"messageTitle":"Merge pull request #111 from spinoandraptos/user-guide","messageBody":"Added command edit and markdiff to UG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"5f28e1fe46eb60942bc947379ad9dc83b5fccab4","isMergeCommit":true,"messageTitle":"Merge branch \u0027user-guide\u0027","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n#\tdocs/UserGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"ec3e1cb9843b15b97dfbc52021f2a4f161060bdd","isMergeCommit":false,"messageTitle":"UG minor format issue","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0ba89c3b74848629c143b227becaed703c32f69e","isMergeCommit":false,"messageTitle":"Fixed DG merge conflict issues","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":36}}},{"hash":"f441f0a5adbc20852fb3830ec3a2a063f3d68072","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"79ec1e5ef98426f93fb6ab8b5e2286b01b14e109","isMergeCommit":false,"messageTitle":"Edited command output documentation for commandShort","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":5}}},{"hash":"04b1b0e7da9288bb64b1dd039643b78edab86cec","isMergeCommit":true,"messageTitle":"Merge pull request #115 from spinoandraptos/master","messageBody":"Fixed some UG and DG formatting issues ","fileTypesAndContributionMap":{}},{"hash":"a61da160651908eb7593de701a261cc1f07bc232","isMergeCommit":false,"messageTitle":"Fixed UG command output diplay formatting issue","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":27,"deletions":27}}},{"hash":"5feab10fa34b9586be80bcaca1c9e6d4a93a3be9","isMergeCommit":false,"messageTitle":"Fixed UG command output formatting issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":14,"deletions":1}}},{"hash":"575c352513ddd1675b3338b80dad6c6b9796d616","isMergeCommit":true,"messageTitle":"Merge pull request #116 from spinoandraptos/master","messageBody":"Fixed UG command output display formatting","fileTypesAndContributionMap":{}},{"hash":"d25ebf8db4dae0634147f8c4ac4edc916a113dcf","isMergeCommit":false,"messageTitle":"Fixed UG help command description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":6}}},{"hash":"475c4fb2e8b2c08a0121af819ff6d8447125ca7c","isMergeCommit":true,"messageTitle":"Merge pull request #117 from spinoandraptos/master","messageBody":"Fixed UG help command description","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}}}]},{"date":"2023-10-24","commitResults":[{"hash":"2f6f59f0c13ee0b29ac45e88736757b5fa17fb33","isMergeCommit":false,"messageTitle":"Add Storage component to developer guide Add several assertions in different classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0},"docs":{"insertions":47,"deletions":0},"test-code":{"insertions":2,"deletions":0}}},{"hash":"50b67f23f9b68a2f68c2912813b942e27c23d08a","isMergeCommit":false,"messageTitle":"Update developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"24a0b4adcea8281b87de99a9697dcf53dbfec03f","isMergeCommit":true,"messageTitle":"Merge pull request #71 from StevenGX12/branch-developer-guide","messageBody":"Update developer guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"a42dacee2795f4d1a17444b40889359e7d35a9dc","isMergeCommit":false,"messageTitle":"Add UI component of developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":0}}},{"hash":"6ce8ba86521d5a3db6dbc61b344d7ebbb2ca663b","isMergeCommit":false,"messageTitle":"Refactor parsing elements from CommandEdit to Parser Fixed tests for CommandFind and CommandEdit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":41},"test-code":{"insertions":80,"deletions":22}}},{"hash":"b0aafa75f406e3f84e19146b4783ce959f15f7a6","isMergeCommit":false,"messageTitle":"Fixed bug in CommandEditTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"32dd7db1a0dc748db256c8c676da8bc9e5b9137e","isMergeCommit":true,"messageTitle":"Merge pull request #97 from StevenGX12/branch-code-refactor","messageBody":"Refactor parsing elements from CommandEdit to Parser\r\nFixed tests for CommandFind and CommandEdit","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"54baf920c7a7fdbe6e96545125fd0369ab6de711","isMergeCommit":false,"messageTitle":"Add user guide for \u0027delete\u0027 and \u0027find\u0027 commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":38,"deletions":0}}},{"hash":"932ab82eb97ae8c9f48fcf4f997751f94ce864f6","isMergeCommit":true,"messageTitle":"Merge pull request #112 from StevenGX12/branch-user-guide","messageBody":"Add user guide for \u0027delete\u0027 and \u0027find\u0027 commands","fileTypesAndContributionMap":{}}]}],"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":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"394b2be754c0261ccd2cabd51b5abc4e12ec3159","isMergeCommit":false,"messageTitle":"Update parser help for start command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":3}}},{"hash":"d276d02dc73ea4d49ec352125f1ec18acd21f6a8","isMergeCommit":false,"messageTitle":"Clarify definition of Command Shuffle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"fb00c8cb043f6bc35a76b77c4bfeb4a13af5445c","isMergeCommit":false,"messageTitle":"implement /normal and /random to startCommand to randomise or sequence questions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":4}}},{"hash":"a1f98f18b169094bf054a4639d0ec7584320f4a1","isMergeCommit":false,"messageTitle":"Refactor executeCommand in CommandStart","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":32}}},{"hash":"36f65e810a94fabeabae270a05b02510a9d3761f","isMergeCommit":false,"messageTitle":"Extend short command to be clear","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-24","commitResults":[{"hash":"cca0cee732367b417feade88a0400aca22811735","isMergeCommit":false,"messageTitle":"Clarify details for Start command in parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"48c585a348444dc89362efbb490d443a9ff96997","isMergeCommit":false,"messageTitle":"Add /random to CommandStart","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"docs":{"insertions":0,"deletions":2}}},{"hash":"bfa0dbaf71d34f67f1d77516511602d6cd51252a","isMergeCommit":true,"messageTitle":"Reimplement /random to CommandStart to resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"497a8678a512fec18759da039c2146823b2606de","isMergeCommit":false,"messageTitle":"Convert /random feature from if-else to switch","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":6}}},{"hash":"e2790379dd843d533a2efd077f72a77374fda7f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-RandomQnsStart","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"230a9be8548c0e1949800de7a700a91f017001c9","isMergeCommit":true,"messageTitle":"Merge pull request #68 from yeo-menghan/branch-RandomQnsStart","messageBody":"Branch random qns start","fileTypesAndContributionMap":{}},{"hash":"ee3a30e89e97a885127654cfb9922b8b2e1e7dee","isMergeCommit":false,"messageTitle":"Add StartCommand uml and StartCommand documentation to DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":66,"deletions":36}}},{"hash":"74667af8a90c7b0a99ecf14324df5242abe80b83","isMergeCommit":true,"messageTitle":"Merge pull request #69 from yeo-menghan/branch-CommandStartUML","messageBody":"Add StartCommand uml and StartCommand documentation to DeveloperGuide.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"07f3f38d233e40fb27b2343eca1cc93f006e4912","isMergeCommit":true,"messageTitle":"Merge pull request #89 from lisizhuang-0121/master","messageBody":"Fix tests in Delete, Edit, Find, List, and Start Test","fileTypesAndContributionMap":{}},{"hash":"edc42130ed23db3fc87396459b920bb24efac7a7","isMergeCommit":false,"messageTitle":"Remove \\r from failed test cases to achieve 100% test cases pass rate","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":8}}},{"hash":"a6ae45406e4159fb94ec01751c78d5e35b9cb5e3","isMergeCommit":true,"messageTitle":"Merge pull request #90 from yeo-menghan/branch-TestCI","messageBody":"Remove \\r from failed test cases to achieve 100% test cases pass rate","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"d849948bec9bff5ec4ec88243682d9bf7b71048f","isMergeCommit":false,"messageTitle":"Init CommandStartTest2","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":146,"deletions":0}}},{"hash":"67c2f966ef8db9da9605b3c496f25e2ae9bf85bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-CommandStartTest2","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"28c555440691ba33b6669122a0bb45ff947a4867","isMergeCommit":false,"messageTitle":"Add UG for Introduction and /help command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":33,"deletions":12},"test-code":{"insertions":0,"deletions":147}}},{"hash":"b18c8df13adb3ec8882607606e40397fa1a9562a","isMergeCommit":false,"messageTitle":"Add UG for /list and /short commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":0}}},{"hash":"e82b7aba052bf90723fb4bd74c79991d19846fc8","isMergeCommit":false,"messageTitle":"Add UG for /start and /shuffle commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":38,"deletions":0}}},{"hash":"9e89a05f90c995aeaf1f30e7123e5d0e6b4dfba5","isMergeCommit":false,"messageTitle":"Edit feature list in UG and add Command Cheatsheet in UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":47,"deletions":41}}},{"hash":"7570f4b92f4a5c86562d382c0e05346e5e0f5480","isMergeCommit":true,"messageTitle":"Merge pull request #99 from yeo-menghan/branch-UG","messageBody":"Branch UG init","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"5e671e61d0548e06eb54500c841e397c39e15cd9","isMergeCommit":false,"messageTitle":"Add ShortAns exception handling for additional commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":5}}}]},{"date":"2023-10-29","commitResults":[{"hash":"702281cfe98cb36b2e2fb4723175ec9dc8eb2f3b","isMergeCommit":false,"messageTitle":"Add duplicate feature to addShortAns to prevent duplicated entries","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":32}}},{"hash":"a6e4e12dc1b5dfbb3b89524862e48c6cca69af8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-ShortAnsIncrement","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8f67ddb669b1f23971beb98bbfc781f30d392334","isMergeCommit":false,"messageTitle":"Resolve gradle checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":2,"deletions":2}}},{"hash":"3ce892dfab685cb5255a0851e80e31650c827b6c","isMergeCommit":true,"messageTitle":"Merge pull request #119 from yeo-menghan/branch-ShortAnsIncrement","messageBody":"Branch short ans increment","fileTypesAndContributionMap":{}},{"hash":"0ab513c35ce0ae812eef641e0e195c3738e576ce","isMergeCommit":false,"messageTitle":"Resolve bug on add short answer with invalid difficulty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"d72728ab2ca460b2530b36bb991207627a149a20","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-ShortAnsIncrement","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8d9f727a7076cc83a85a9e31be84494af0603e71","isMergeCommit":true,"messageTitle":"Merge pull request #121 from yeo-menghan/branch-ShortAnsIncrement","messageBody":"Branch short ans increment","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":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"8eff0aa37130c992176747b7492a81e7b467881f","isMergeCommit":true,"messageTitle":"Merge pull request #64 from yeo-menghan/branch-RandomQnsStart","messageBody":"Branch random qns start","fileTypesAndContributionMap":{}},{"hash":"4c31e670091d8b8623045ef038dd0677faa4c706","isMergeCommit":false,"messageTitle":"Revert \"Branch random qns start\"","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":50}}},{"hash":"75b8cefa4e66396db41a38fe53c5fca5c56a331b","isMergeCommit":true,"messageTitle":"Merge pull request #65 from AY2324S1-CS2113-W12-1/revert-64-branch-RandomQnsStart","messageBody":"Revert \"Branch random qns start\"","fileTypesAndContributionMap":{}},{"hash":"7a52c4a396e0e4f2067745f743607d01275b11c4","isMergeCommit":false,"messageTitle":"Add Short Command and Find Command to Dev Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":30,"deletions":0}}},{"hash":"3f850e1678e0167cd2c3c3868c7e601a154824d2","isMergeCommit":true,"messageTitle":"Merge pull request #70 from James-Hong-Jey/master","messageBody":"Add Short Command and Find Command to Dev Guide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"ebf475c90b99fe9d6d3aa92bb985a9413c5147b0","isMergeCommit":false,"messageTitle":"Add Short Command diagram","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":0}}},{"hash":"52e9f4189576a52196d287369f67fd5595f54dec","isMergeCommit":true,"messageTitle":"Merge pull request #72 from James-Hong-Jey/master","messageBody":"Add Short Command Diagram to DG","fileTypesAndContributionMap":{}},{"hash":"6a2bd99d3c3a5fcd38caec28c6549910dc9af1fa","isMergeCommit":false,"messageTitle":"Fix test files style","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":14}}},{"hash":"0aa3c28f9bf7bd41d534d1aae5e3e7f6bc391b31","isMergeCommit":false,"messageTitle":"Fix 1 Junit, 2 left to fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":34},"test-code":{"insertions":39,"deletions":0}}},{"hash":"5e4abb7ed5853f686f424aadfb582c960d75f4a0","isMergeCommit":true,"messageTitle":"Merge pull request #76 from James-Hong-Jey/master","messageBody":"Pass CI tests halfway","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"e67b9800fdbbd75a51dc6ee413230fd6a6e50bf8","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":36},"test-code":{"insertions":5,"deletions":5}}},{"hash":"d43962c336a76536f2e5408e1c2171dce94e0f5d","isMergeCommit":true,"messageTitle":"Merge pull request #87 from StevenGX12/branch-developer-guide","messageBody":"Add UI component of developer guide","fileTypesAndContributionMap":{}},{"hash":"0c023f11f1f368f6fded9ef6509758a4cf8554a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5751d0bbd081e2f4d90d446cadacadd6c2425195","isMergeCommit":false,"messageTitle":"Attempt fix of edit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":1}}},{"hash":"67c4dd17ecf6911163fd11737ef539a04c918fdd","isMergeCommit":true,"messageTitle":"Merge pull request #88 from James-Hong-Jey/master","messageBody":"Fix Checkstyle","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":{}}]},{"date":"2023-10-25","commitResults":[{"hash":"840bc8874c62cdae1635bb396c7472e5b92ea891","isMergeCommit":false,"messageTitle":"Update skeleton for parsing commands in Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":25},"test-code":{"insertions":1,"deletions":1}}},{"hash":"3de09345ce79e937fe1b28d8547c95d1c96799e4","isMergeCommit":false,"messageTitle":"Convert error messages in commands to public static","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":31}}},{"hash":"d3ef7652234fa173d82caf858b55059787f7c7d4","isMergeCommit":true,"messageTitle":"Merge pull request #80 from lisizhuang-0121/master","messageBody":"Refactor code in parser and commands","fileTypesAndContributionMap":{}},{"hash":"ce66fae4dcbdf87e7be7c760939543bf9c09b9e3","isMergeCommit":false,"messageTitle":"Update test for DELETE command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":5}}},{"hash":"6298b5e18132f5f793c53653f79c492abe4ef646","isMergeCommit":false,"messageTitle":"Refactor and move FIND command parsing to parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":39},"test-code":{"insertions":9,"deletions":1}}},{"hash":"491d4ea6282298abf9ad999247a115f48ac92c7b","isMergeCommit":true,"messageTitle":"Merge pull request #85 from lisizhuang-0121/master","messageBody":"Refactor code in command parsing and find command","fileTypesAndContributionMap":{}},{"hash":"aab6e922c577e387de591d9bbdd442e25d2185e2","isMergeCommit":false,"messageTitle":"Abstract function to create short answer question","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":76},"test-code":{"insertions":2,"deletions":0}}},{"hash":"e3f9ef91b2e39bf7748595322511426a06b03f63","isMergeCommit":false,"messageTitle":"Fix tests temporarily due to change in add question command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2},"test-code":{"insertions":21,"deletions":18}}},{"hash":"e1f6cf0c7f744be154bf2ed096925d28869d45d8","isMergeCommit":true,"messageTitle":"Merge pull request #86 from lisizhuang-0121/master","messageBody":"Modify Short Answer Question Command to use parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"0e0bdcaa0bfcfbe380db710e2c02ebde76472d8f","isMergeCommit":false,"messageTitle":"Fix tests in Delete, Edit, Find, List, and Start Test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":74,"deletions":60}}},{"hash":"47620310a4e57800b720b164b735f2745f03b751","isMergeCommit":false,"messageTitle":"Temporarily disable failed tests for refactoring","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":41,"deletions":41}}},{"hash":"c40c624bfa3912f4b168a06caa5e74576cb41707","isMergeCommit":false,"messageTitle":"Remove line seperators before assertion testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":36}}},{"hash":"d16ffcdc0e7dcac18b6be9842aaa91fa681cc3f7","isMergeCommit":true,"messageTitle":"Merge pull request #95 from lisizhuang-0121/master","messageBody":"Fix CI errors in assertion testing due to line seperators","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"spinoandraptos":{"docs":245,"functional-code":853,"test-code":670,"other":3},"StevenGX12":{"docs":117,"functional-code":127,"test-code":322},"yeo-menghan":{"docs":103,"functional-code":200,"test-code":48},"James-Hong-Jey":{"docs":50,"functional-code":311,"test-code":75},"lisizhuang-0121":{"docs":54,"functional-code":351,"test-code":154,"other":1}},"authorContributionVariance":{"spinoandraptos":95709.44,"StevenGX12":4508.729,"yeo-menghan":7623.073,"James-Hong-Jey":19103.39,"lisizhuang-0121":48132.215},"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-CS2113T-W11-1_tp_master/authorship.json b/AY2324S1-CS2113T-W11-1_tp_master/authorship.json index eddbf34..d25e8fa 100644 --- a/AY2324S1-CS2113T-W11-1_tp_master/authorship.json +++ b/AY2324S1-CS2113T-W11-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":"yingx9"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":46,"yingx9":1}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"|-------------------------------------------------------------------------|:-------------:|:-----------------------------------------:|:--------------------------------:|","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"| ![yingxia_portfolio.jpg](team/pictures/yingxia_portfolio.jpg) | Loke Ying Xia | [Github](https://github.com/yingx9) | [Portfolio](team/YingXia.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"| ![benjaminng_portfolio.jpeg](team/pictures/benjaminng_portfolio.jpeg) | Benjamin Ng | [Github](https://github.com/bnjm2000) | [Portfolio](team/BenjaminNg.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"| ![joanneang_portfolio.jpg](team/pictures/joanneang_portfolio.jpg) | Joanne Ang | [Github](https://github.com/JoanneJo) | [Portfolio](team/JoanneAng.md) |","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"| ![ashokbalaji_portfolio.jpg](./team/pictures/ashokbalaji_portfolio.jpg) | Ashok Balaji | [Github](https://github.com/000verflow) | [Portfolio](team/ashokbalaji.md) |","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Wu Xingyu | [Github](https://github.com/DavinciDelta) | [Portfolio](team/WuXingyu.md) |","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"bnjm2000":3,"JoanneJo":2,"-":1,"yingx9":2}},{"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":"JoanneJo"},"content":"## Setting Up \u0026 Getting Started","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"1. Fork the repo at https://github.com/AY2324S1-CS2113T-W11-1/tp.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"2. Clone the fork into your computer.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"## Design \u0026 Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"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":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"### Architecture","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" /\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"**Main components of SysLib Architecture**","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"SysLib currently consists of four main components:","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"- `UI`: User Interaction","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":"- `Parser`: Parsing User Response ","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":"- `Command`: Command Executor","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":"- `Data`: Holds the data of SysLib","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"### UI Component","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":"### Parser Component","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":"### Command Component","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"### Data Component","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":"## Implementation ","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":"This section provides details on how certain features are implemented. ","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":"### Find Resource Feature","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":"The `find` command allows users to search for resources based on specified filters such as author (`/a`), ISBN (`/i`), ID (`/id`), and title (`/t`). The results will show all resources that match any of the given filters.","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"000verflow"},"content":"`find` has the following options:","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"000verflow"},"content":"- `find /id [ID]`","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"000verflow"},"content":"- `find /t [TITLE]`","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":"- `find /a [AUTHOR]`","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":"- `find /i [ISBN]`","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"Multiple filters can also be combined:","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":"- `find /t [TITLE] /a [AUTHOR]`","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":"#### Implementation","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":"Upon receiving the `find` command, the system will:","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":"1. Parse the filters and their associated values.","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":"2. Filter the resources based on the given filters.","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"000verflow"},"content":"3. Display the matching resources.","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":"#### Example Usage Scenario","lastModifiedDate":"2023-10-27"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":"**Step 1.** The user inputs the command: `find /a \"F. Scott Fitzgerald\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":"**Step 2.** The `UI` component forwards the input to `SYSLIB`, which then sends it to the `PARSER`.","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":"**Step 3.** The `PARSER` processes the command, extracts the `author` filter, and retrieves all resources written by \"F. Scott Fitzgerald\".","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"000verflow"},"content":"**Step 4.** The matching resources are displayed to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":"#### Sequence Diagram","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":"A sequence diagram could be provided here to visually show how the `find` function works.","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":"(Note: You would include the actual sequence diagram image, similar to the diagrams shown for other features.)","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":"### Examples for Testing","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":"1. **Find by Author**","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":" - Test case: `find /a \"F. Scott Fitzgerald\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":" Expected: All resources written by F. Scott Fitzgerald are displayed.","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"000verflow"},"content":"2. **Find by ISBN**","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":" - Test case: `find /i \"9780061120084\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":" Expected: The resource with ISBN \"9780061120084\" is displayed, which should be \"To Kill a Mockingbird\" by Harper Lee.","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"000verflow"},"content":"3. **Find by ID**","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":" - Test case: `find /id 2`","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"000verflow"},"content":" Expected: The resource with ID \"2\" is displayed, which should be \"To Kill a Mockingbird\" by Harper Lee.","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":"4. **Find by Title**","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":" - Test case: `find /t \"The Great Gatsby\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":" Expected: The resource titled \"The Great Gatsby\" is displayed.","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":"5. **Combining Filters**","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":" - Test case: `find /a \"F. Scott Fitzgerald\" /t \"The Great Gatsby\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":" Expected: Only the resource that matches both the title \"The Great Gatsby\" and the author \"F. Scott Fitzgerald\" is displayed.","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"JoanneJo"},"content":"### Add Resource Feature","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"JoanneJo"},"content":"The `add` feature is responsible for processing user commands to add a new book to SysLib. It is facilitated by ","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"JoanneJo"},"content":"the `AddCommand` component. It works with `Parser` and `Command` components to parse and validate the user input. ","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"JoanneJo"},"content":"The new book is stored internally in `resourceList` as a `Book`. ","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"JoanneJo"},"content":"`add` has six options:","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"JoanneJo"},"content":"- add /id [id] /t [title] /a [author] /tag [tag] /i [isbn]","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"JoanneJo"},"content":"- add /id [id] /t [title] /a [author] /tag [tag] /i [isbn] _/g [genre]_","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"JoanneJo"},"content":"#### Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"JoanneJo"},"content":"It implements the following operations:","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"JoanneJo"},"content":"- `ADDCOMMAND#parseArgument(statement: String)` -- Parses the input command to extract relevant information.","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"JoanneJo"},"content":"- `ADDCOMMAND#validate(statement: String, values: String[])` -- Validates the input statement to ensure that it is valid.","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"JoanneJo"},"content":"- `ADDCOMMAND#createBook(values: String[])` -- Creates a new book based on the parsed and validated values.","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"JoanneJo"},"content":"#### Example Usage Scenario","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"JoanneJo"},"content":"Step 1. The user inputs the command: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"JoanneJo"},"content":"Step 2. The `UI` component forwards the input to `SYSLIB`, which in turn passes it to the `PARSER`.","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"JoanneJo"},"content":"Step 3. The `PARSER` processes the command and determines that it contains a valid key (`add`). It then calls ","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"JoanneJo"},"content":"`ADDCOMMAND#execute(statement: String, this: Parser)` with the input command.","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"JoanneJo"},"content":"Step 4. The `ADDCOMMMAND` component receives the command and performs the following operations:","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"JoanneJo"},"content":"- Calls `ADDCOMMAND#parseArgument(statement: String)` to extract values for ID, title, author, ISBN, tag, and genres.","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"JoanneJo"},"content":"- Calls `ADDCOMMAND#validate(statement: String, values: String[])` to ensure the validity of the input command.","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"JoanneJo"},"content":"Step 5. The `COMMAND` component processes the input command to ensure that it meets the required format and constraints.","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"JoanneJo"},"content":"It prepares the argument values for further processing.","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"JoanneJo"},"content":"Step 6. Since the `tag` argument in the input command indicates that it is a book, the `ADDCOMMAND` determines that the","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"JoanneJo"},"content":"key is equal to `b` (ignoring case). It then creates a new `Book` object using the parsed values (title, ISBN, author, ","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"JoanneJo"},"content":"genres, ID).","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"JoanneJo"},"content":"Step 7. The newly created book is forwarded to the `PARSER` to be added to the `resourceList`.","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"JoanneJo"},"content":"#### Sequence Diagram","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"JoanneJo"},"content":"The following sequence diagram shows how the add function works:","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"JoanneJo"},"content":"\u003cimg src\u003d\"images/AddSequenceDiagram.png\"/\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"yingx9"},"content":"### Listing Resources Feature","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"yingx9"},"content":"The `list` command works with the `Parser` and `Command` component to execute the correct action. ","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"yingx9"},"content":"`list` has four options:","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"yingx9"},"content":"- list","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"yingx9"},"content":"- list _/tag [tag]_","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"yingx9"},"content":"- list _/g [genre]_","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"yingx9"},"content":"- list _/tag [tag]_ _/g [genre]_","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"yingx9"},"content":"When `list` is specified with both `tag` and `genre` filters, it is `AND` inclusive, listing only ","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"yingx9"},"content":"Resources with the same tag and genre. ","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"yingx9"},"content":"Sequence Diagram:","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"yingx9"},"content":"\u003cimg src\u003d\"images/ListSequenceDiagram.png\" /\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"yingx9"},"content":"When a user enters `list /tag B`, the Parser retrieves the parameters from the input and","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"yingx9"},"content":"calls the `execute` function of ListCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"yingx9"},"content":"ListCommand then calls `parseArg` and `validate` from `Command`, which checks if the parameters are valid. If it passes","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"yingx9"},"content":"the checks, `filterResources` is called to begin the filtering process. First it calls `hasFilters()` check if the user ","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"yingx9"},"content":"selected any filters `[tag/genre/both]` or none. ","lastModifiedDate":"2023-10-26"},{"lineNumber":176,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"yingx9"},"content":"If hasFilters returns `true`, it filters the `resourceList` with the given keywords and display the details ","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"yingx9"},"content":"of the resources.","lastModifiedDate":"2023-10-26"},{"lineNumber":179,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":180,"author":{"gitId":"yingx9"},"content":"If hasFilters returns `false`, it skips the filtering process and displays the details of all the resources.","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":183,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":186,"author":{"gitId":"DavinciDelta"},"content":"All librarians, not just system librarian!","lastModifiedDate":"2023-10-24"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":188,"author":{"gitId":"JoanneJo"},"content":"- Needs to manage inventory with significant number of resources e.g. books","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"JoanneJo"},"content":"- Is a fast typist","lastModifiedDate":"2023-10-26"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"JoanneJo"},"content":"### Value Proposition","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":193,"author":{"gitId":"DavinciDelta"},"content":"To provide a platform to help librarians to quickly find the information they need to assist patrons.","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":197,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":198,"author":{"gitId":"bnjm2000"},"content":"|---------|-----------|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | view a list of books that the library has | have an overview of all the books |","lastModifiedDate":"2023-10-24"},{"lineNumber":200,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | add new books to our inventory by entering their title, author, ISBN, and publication year | keep our collection up-to-date |","lastModifiedDate":"2023-10-24"},{"lineNumber":201,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | delete books from the database | let the patrons know our library no longer carries it |","lastModifiedDate":"2023-10-24"},{"lineNumber":202,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | tag a book as physical medium like newspapers, audio cds, books or online like eJournals | patrons can know what type are available |","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | have a help function | know the commands of this programme |","lastModifiedDate":"2023-10-24"},{"lineNumber":204,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | quickly find out how many books we have of a particular author and the names of the books | know how many books are related to the author |","lastModifiedDate":"2023-10-24"},{"lineNumber":205,"author":{"gitId":"bnjm2000"},"content":"| v2.0 | librarian | import/export our library\u0027s inventory data to a file format | easily share with other libraries to be used for backup and archival purposes. |","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | find a to-do item by name | locate a to-do without having to go through the entire list |","lastModifiedDate":"2023-10-27"},{"lineNumber":207,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | get the status of an item | know if it is available |","lastModifiedDate":"2023-10-27"},{"lineNumber":208,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | update the details of a resource | fix any mistakes and maintain consistency |","lastModifiedDate":"2023-10-27"},{"lineNumber":209,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | add in different types of resources | differentiate between resources such as magazines, cds... |","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":211,"author":{"gitId":"JoanneJo"},"content":"## Use Cases","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"JoanneJo"},"content":"(For all use cases below, the System is the SysLib and the Actor is the user, unless specified otherwise)","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"JoanneJo"},"content":"### Use case: Add a book","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"JoanneJo"},"content":"#### MSS","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"JoanneJo"},"content":"1. User requests to add a book","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"JoanneJo"},"content":"2. AddressBook adds the book","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"JoanneJo"},"content":" Use case ends.","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"JoanneJo"},"content":"#### Extensions","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"JoanneJo"},"content":"- 1a. The given ID is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"JoanneJo"},"content":" - 1a1. SysLib shows an error message.","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"JoanneJo"},"content":" Use case ends.","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"JoanneJo"},"content":"- 1b. Insufficient data given.","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"JoanneJo"},"content":" - 1b1. SysLib shows an error message.","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"JoanneJo"},"content":" Use case ends.","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":236,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":238,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":239,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":240,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":242,"author":{"gitId":"JoanneJo"},"content":"## Instructions for Manual Testing","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":244,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"bnjm2000"},"content":"help","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"bnjm2000"},"content":"Commands available:","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"bnjm2000"},"content":"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE])","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"bnjm2000"},"content":"delete: deletes the resource with the specified ID from the library inventory. (e.g. delete /id 123456789)","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"bnjm2000"},"content":"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"bnjm2000"},"content":"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"bnjm2000"},"content":"exit: displays a farewell message and exits the program (e.g. exit)","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"bnjm2000"},"content":"For more information, please refer to our user guide at:https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html","lastModifiedDate":"2023-10-26"},{"lineNumber":256,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"bnjm2000"},"content":"add /id 1 /t The Great Gatsby /a F. Scott Fitzgerald /tag B /i 9780023381201 /g Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":263,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":264,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"bnjm2000"},"content":"This book is added: The Great Gatsby","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":268,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":269,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"bnjm2000"},"content":"add /id 2 /t To Kill a Mockingbird /a Harper Lee /tag B /i 9780061120084 /g Novel, Bildungsroman, Southern Gothic, Domestic Fiction, Thriller, Legal Story","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"bnjm2000"},"content":"This book is added: To Kill a Mockingbird","lastModifiedDate":"2023-10-26"},{"lineNumber":275,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":276,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"bnjm2000"},"content":"list","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":281,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"bnjm2000"},"content":"Listing all resources in the Library:","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"bnjm2000"},"content":"1. [B] ID: 1 Title: The Great Gatsby ISBN: 9780023381201 Author: F. Scott Fitzgerald Genre: Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"bnjm2000"},"content":"2. [B] ID: 2 Title: To Kill a Mockingbird ISBN: 9780061120084 Author: Harper Lee Genre: Novel, Bildungsroman, Southern Gothic,","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"bnjm2000"},"content":"There are currently 2 resource(s).","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"bnjm2000"},"content":"delete /id 1","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":296,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"bnjm2000"},"content":"Looking for ID: 1...","lastModifiedDate":"2023-10-26"},{"lineNumber":298,"author":{"gitId":"bnjm2000"},"content":"This resource is removed: ","lastModifiedDate":"2023-10-26"},{"lineNumber":299,"author":{"gitId":"bnjm2000"},"content":"[B] ID: 1 Title: The Great Gatsby ISBN: 9780023381201 Author: F. Scott Fitzgerald Genre: Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"bnjm2000"},"content":"exit","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":308,"author":{"gitId":"bnjm2000"},"content":"Bye, hope to see you again soon!","lastModifiedDate":"2023-10-26"},{"lineNumber":309,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":310,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":311,"author":{"gitId":"JoanneJo"},"content":"### Launch and Shutdown","lastModifiedDate":"2023-10-26"},{"lineNumber":312,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":313,"author":{"gitId":"JoanneJo"},"content":"1. Initial launch","lastModifiedDate":"2023-10-26"},{"lineNumber":314,"author":{"gitId":"JoanneJo"},"content":" 1. Download the jar file and copy it into an empty folder.","lastModifiedDate":"2023-10-26"},{"lineNumber":315,"author":{"gitId":"JoanneJo"},"content":" 2. Open the command prompt and run `java -jar SysLib.jar`.","lastModifiedDate":"2023-10-26"},{"lineNumber":316,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":317,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":318,"author":{"gitId":"JoanneJo"},"content":"### Adding a Book","lastModifiedDate":"2023-10-26"},{"lineNumber":319,"author":{"gitId":"JoanneJo"},"content":"1. Add a book","lastModifiedDate":"2023-10-26"},{"lineNumber":320,"author":{"gitId":"JoanneJo"},"content":" 1. Test case: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B`","lastModifiedDate":"2023-10-26"},{"lineNumber":321,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":322,"author":{"gitId":"JoanneJo"},"content":" Expected: A book with ID: 0005, Title: Frankenstein, Author: Mary Shelley, and ISBN: FKS0001 is created and added ","lastModifiedDate":"2023-10-26"},{"lineNumber":323,"author":{"gitId":"JoanneJo"},"content":" into the list. A message is shown to acknowledge that the book has been added successfully.","lastModifiedDate":"2023-10-26"},{"lineNumber":324,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":325,"author":{"gitId":"JoanneJo"},"content":" 2. Test case: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":326,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":327,"author":{"gitId":"JoanneJo"},"content":" Expected: A book with ID: 0005, Title: Frankenstein, Author: Mary Shelley, ISBN: FKS0001, and ","lastModifiedDate":"2023-10-26"},{"lineNumber":328,"author":{"gitId":"JoanneJo"},"content":" Genres: Gothic, Fiction is created and added into the list. A message is shown to acknowledge that the book ","lastModifiedDate":"2023-10-26"},{"lineNumber":329,"author":{"gitId":"JoanneJo"},"content":" has been added successfully.","lastModifiedDate":"2023-10-26"},{"lineNumber":330,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":331,"author":{"gitId":"JoanneJo"},"content":" 3. Test case: `add /id abcd /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":332,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":333,"author":{"gitId":"JoanneJo"},"content":" Expected: No book is added. An error message is shown to indicate that the id is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":334,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":335,"author":{"gitId":"JoanneJo"},"content":" 4. Test case: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag A /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":336,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":337,"author":{"gitId":"JoanneJo"},"content":" Expected: No book is added. An error message is shown to indicate that the tag is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":338,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":339,"author":{"gitId":"JoanneJo"},"content":" 5. Test case: `add /id 0005 /t Frankenstein`","lastModifiedDate":"2023-10-26"},{"lineNumber":340,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":341,"author":{"gitId":"JoanneJo"},"content":" Expected: No book is added. An error message is shown to indicate that the input is incomplete.","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"000verflow":69,"bnjm2000":70,"JoanneJo":107,"DavinciDelta":8,"-":31,"yingx9":56}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"# Syslib","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"SysLib CLI is a robust command-line tool designed for system librarians to efficiently handle inventory, events, and patron assistance. With quick command-based actions, manage your library\u0027s resources and events seamlessly. Simplify administrative tasks, so you can focus on serving patrons better.","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"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":{"bnjm2000":3,"-":6}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"# User guide","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"SysLib CLI is a program designed specially for system libarians to manage their work and responsibilities. Using intuitive commands, view, add, delete, and find books from the library inventory without any hassle.","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"## Contents","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"* [Quick start](#quick-start--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"* [Features](#features--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"000verflow"},"content":" * [Get help: `help`](#viewing-help--help--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":8,"author":{"gitId":"000verflow"},"content":" * [Add a listing: `add`](#add-a-listing-add--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":" * [Delete a listing: `delete`](#delete-a-listing-delete--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":" * [List items: `list`](#list-all-items-list--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":" * [Find listing by search parameter: `find`](#find-specific-listings-find--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":" * [Exiting the program : `exit`](#exiting-the-program--exit--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":"* [FAQ](#faq--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":"* [Known Issues](#known-issues--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":"* [Command summary](#command-summary--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":"## Quick start | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":"- Make sure that you have Java 11 or above installed on your computer.","lastModifiedDate":"2023-10-06"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" - [How do I check the verison of my Java](https://www.java.com/en/download/help/version_manual.html)","lastModifiedDate":"2023-10-06"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":"## Features | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":"\u003e Note:","lastModifiedDate":"2023-10-06"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":"\u003e - Items in square brackets `[]` are optional arguments.","lastModifiedDate":"2023-10-06"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":"\u003e - Items with `...` after them can be used multiple times","lastModifiedDate":"2023-10-06"},{"lineNumber":27,"author":{"gitId":"000verflow"},"content":" \u003e * e.g `[/g GENRE]` ... can be used as `/g Horror /g Fantasy`","lastModifiedDate":"2023-10-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":"## Viewing help : `help` | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":"Displays a list of available commands with examples and their syntax format","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"000verflow"},"content":"Format: `help`","lastModifiedDate":"2023-10-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":"## Add a listing: `add` | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":"Adds a new resource to the library inventory.","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"000verflow"},"content":"#### Types of tags:","lastModifiedDate":"2023-10-06"},{"lineNumber":39,"author":{"gitId":"000verflow"},"content":"`[B]` - Books","lastModifiedDate":"2023-10-06"},{"lineNumber":40,"author":{"gitId":"000verflow"},"content":"`[CD]` - CDs","lastModifiedDate":"2023-10-06"},{"lineNumber":41,"author":{"gitId":"000verflow"},"content":"`[N]` - Newspapers","lastModifiedDate":"2023-10-06"},{"lineNumber":42,"author":{"gitId":"000verflow"},"content":"`[M]` - Magazines","lastModifiedDate":"2023-10-06"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":"\u003e Note:","lastModifiedDate":"2023-10-06"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":"\u003e - Anything with `e` prior is an electronic version","lastModifiedDate":"2023-10-06"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":" \u003e i.e. `[eB]` is an eBook, `[eM]` is an eMagazine","lastModifiedDate":"2023-10-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":"#### Notes about genre:","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":"Multiple genres are allowed for a single resource. Separate the different genres using comma followed by a space `, `.","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":"Format: `add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]...`","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":"**Example**","lastModifiedDate":"2023-10-06"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":"add /id 123456789 /t Moby Dick /a Herman Melville /tag B /i 9780763630188 /g Adventure, Fiction","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":"add /id 123456789 /t Harry Squatter /a J.K. /tag M /i 9780763630187 /g History","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":"## Delete a listing: `delete` | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"Deletes the resource with the specified ID from the library inventory.","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":"Format: `delete /id ID`","lastModifiedDate":"2023-10-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":"**Example**","lastModifiedDate":"2023-10-06"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":"delete /id 123456789","lastModifiedDate":"2023-10-06"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":"## List all items: `list` | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":"You can list all resources OR filter by certain tags or genre.","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":"Format: `list [/tag TAG /g GENRE ]`","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"- Including both filters `tag` and `genre` will only list resources satisfying both criteria:","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":" - `list /tag B /g Horror` will list Books with Horror genre. ","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":"**Example**","lastModifiedDate":"2023-10-06"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":"list","lastModifiedDate":"2023-10-06"},{"lineNumber":80,"author":{"gitId":"yingx9"},"content":"list /tag B","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yingx9"},"content":"list /tag B /g Fiction","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"JoanneJo"},"content":"list /g Thrill","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":"## Find specific listings: `find` | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":86,"author":{"gitId":"yingx9"},"content":"Find a resource by title, author, ISBN or given id.","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":88,"author":{"gitId":"JoanneJo"},"content":"Format: `find [/t TITLE OR /i ISBN OR /a AUTHOR OR /id ID]`","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":"**Example**","lastModifiedDate":"2023-10-06"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":92,"author":{"gitId":"JoanneJo"},"content":"find /t Moby Dick","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"JoanneJo"},"content":"find /i 9780763630188","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":"find /a J. K. Rowling","lastModifiedDate":"2023-10-06"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":"find /id 123456789","lastModifiedDate":"2023-10-06"},{"lineNumber":96,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":"## Exiting the program : `exit` | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":"Displays a farewell message and exits the program","lastModifiedDate":"2023-10-06"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":"Format: `exit`","lastModifiedDate":"2023-10-06"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":"## FAQ | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":"...","lastModifiedDate":"2023-10-06"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":"## Known Issues | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":109,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":110,"author":{"gitId":"000verflow"},"content":"...","lastModifiedDate":"2023-10-06"},{"lineNumber":111,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":112,"author":{"gitId":"000verflow"},"content":"## Command summary | [Return to contents](#Contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":113,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":114,"author":{"gitId":"000verflow"},"content":"| Action | Command |","lastModifiedDate":"2023-10-06"},{"lineNumber":115,"author":{"gitId":"JoanneJo"},"content":"|-----------------------|------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"JoanneJo"},"content":"| Add listing | `add /t \u003ctitle of listing\u003e /a \u003cauthor of item\u003e /tag \u003ctype of item\u003e /i \u003cISBN of item\u003e [/g \u003cgenre of item\u003e]` |","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"000verflow"},"content":"| Delete listing | `delete /id \u003cid of listing\u003e` |","lastModifiedDate":"2023-10-06"},{"lineNumber":118,"author":{"gitId":"yingx9"},"content":"| Listing all items | `list [/tag \u003ctype of item\u003e /g \u003cgenre of book\u003e]` |","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"JoanneJo"},"content":"| Find specific listing | `find [/t \u003ctitle of listing\u003e OR /i \u003cISBN of item\u003e OR /a AUTHOR OR /id ID]` |","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"000verflow"},"content":"| Exit | `exit` |","lastModifiedDate":"2023-10-06"},{"lineNumber":121,"author":{"gitId":"000verflow"},"content":"| View help | `help` |","lastModifiedDate":"2023-10-06"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"000verflow":80,"bnjm2000":1,"JoanneJo":11,"-":19,"yingx9":11}},{"path":"docs/diagram/AddSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"JoanneJo"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"!include Style.puml","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":"participant \":SysLib\" as SYSLIB SYSLIB_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"participant \":UI\" as UI UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"actor User as USER USER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"participant \":Parser\" as PARSER PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"box Command","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"participant \":AddCommand\" as ADDCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"participant \":Command\" as COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":"end box","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":"SYSLIB -[SYSLIB_COLOR]\u003e UI : readCommand()","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"JoanneJo"},"content":"activate SYSLIB SYSLIB_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"JoanneJo"},"content":"activate UI UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"JoanneJo"},"content":"USER -[USER_COLOR]\u003e UI : \"add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\"","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"JoanneJo"},"content":"UI --[UI_COLOR]\u003e SYSLIB : input: String","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"JoanneJo"},"content":"deactivate UI","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":"SYSLIB -[SYSLIB_COLOR]\u003e PARSER : process(\"add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\")","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":"activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"JoanneJo"},"content":"alt containsKey","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"JoanneJo"},"content":" PARSER-[PARSER_COLOR]\u003e PARSER: removeFirstWord(add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction)","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"JoanneJo"},"content":" activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"JoanneJo"},"content":" PARSER --[PARSER_COLOR]\u003e PARSER : \"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\": String","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"JoanneJo"},"content":" deactivate PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"JoanneJo"},"content":" PARSER -[PARSER_COLOR]\u003e ADDCOMMAND : execute(\"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\")","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"JoanneJo"},"content":" activate ADDCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"JoanneJo"},"content":"else noKey","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"JoanneJo"},"content":" PARSER --[PARSER_COLOR]\u003e SYSLIB","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"JoanneJo"},"content":"end","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"JoanneJo"},"content":"ADDCOMMAND -[COMMAND_COLOR]\u003e COMMAND : parseArgument(\"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\")","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"JoanneJo"},"content":"activate COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"JoanneJo"},"content":"COMMAND --[COMMAND_COLOR]\u003e ADDCOMMAND : values: String[]","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":"ADDCOMMAND -[COMMAND_COLOR]\u003e COMMAND : validate(\"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\", values)","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"JoanneJo"},"content":"COMMAND --[COMMAND_COLOR]\u003e ADDCOMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"JoanneJo"},"content":"deactivate COMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"JoanneJo"},"content":"alt equalsIgnoreCase(\"b\")","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":" ADDCOMMAND -[COMMAND_COLOR]\u003e PARSER : createBook(values)","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"JoanneJo"},"content":" PARSER --[PARSER_COLOR]\u003e ADDCOMMAND : new Book (title, isbn, author, genres, id)","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"JoanneJo"},"content":" ADDCOMMAND --[COMMAND_COLOR]\u003e PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":"else notEqualsIgnoreCase(\"b\")","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"JoanneJo"},"content":" ADDCOMMAND --[COMMAND_COLOR]\u003e PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"JoanneJo"},"content":" deactivate ADDCOMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"JoanneJo"},"content":"end","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":"PARSER --[PARSER_COLOR]\u003e SYSLIB","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"JoanneJo"},"content":"deactivate PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"JoanneJo"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"JoanneJo":59}},{"path":"docs/diagram/Architecture.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/globe_internet\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/documents\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Users/user\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"!include style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"Package \" \"\u003c\u003cRectangle\u003e\u003e{","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":" Class UI UI_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":" Class Parser PARSER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":" Class Command COMMAND_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":" Class Data DATA_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":" Class Main #grey","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"Class \"\u003c$user\u003e\" as User STORAGE_COLOR_T2","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"UI -[#green]\u003e Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"Main -[#grey]-\u003e UI","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"Main -[#grey]-\u003e Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"Parser -[#grey]-\u003e Command","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"Parser -[#blue]-\u003e Data","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"User ..\u003e UI","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"yingx9":25}},{"path":"docs/diagram/ListSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"!include Style.puml","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/globe_internet\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/documents\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Users/user\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"participant \":Main\" as MAIN #grey","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"participant \":UI\" as UI UI_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"participant \":Parser\" as PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"box Command","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"participant \":ListCommand\" as LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"participant \":Command\" as COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"end box","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"MAIN -[#grey]\u003e UI : readcommand()","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"activate MAIN #grey","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"activate UI UI_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":"user -[USER_COLOR]\u003e UI : \"list /tag B\"","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":"UI --[UI_COLOR]\u003e MAIN : \"list /tag B\"","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"deactivate UI UI_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":"MAIN -[#grey]\u003e PARSER : process(\"list /tag B\")","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":"alt containsKey","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" PARSER -[PARSER_COLOR]\u003e PARSER: removeFirstWord(\"list /tag B\")","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" PARSER --[PARSER_COLOR]\u003e PARSER : \"/tag B\"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" deactivate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":" PARSER -[PARSER_COLOR]\u003e LISTCOMMAND: execute(\"/tag B\")","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":"else noKey","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" PARSER --[PARSER_COLOR]\u003e MAIN :","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":"end","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e COMMAND : parseArg(\"/tag B)","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":"activate COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"COMMAND --[COMMAND_COLOR]\u003e LISTCOMMAND : String[] values","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e COMMAND : validate(\"/tag B\", values)","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":"COMMAND --[COMMAND_COLOR]\u003e LISTCOMMAND :","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":"deactivate COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e LISTCOMMAND : filterResources()","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":"activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e LISTCOMMAND : hasFilters()","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":"activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND --[COMMAND_COLOR]\u003e LISTCOMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e LISTCOMMAND : displayResourcesDetails()","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":"activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND --[COMMAND_COLOR]\u003e PARSER","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":"PARSER --[PARSER_COLOR]\u003e MAIN :","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"deactivate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"yingx9":75}},{"path":"docs/diagram/Style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"/\u0027","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":" \u0027Commonly used styles and colors across diagrams.","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":" \u0027Refer to https://plantuml-documentation.readthedocs.io/en/latest for a more","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":" \u0027comprehensive list of skinparams.","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":" \u0027/","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"\u0027T1 through T4 are shades of the original color from lightest to darkest","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"!define SYSLIB_COLOR #grey","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR #1D8900","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T1 #83E769","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T2 #3FC71B","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T3 #166800","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T4 #0E4100","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR #3333C4","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T1 #C8C8FA","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T2 #6A6ADC","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR #9D0012","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T1 #F97181","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T2 #E41F36","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T3 #7B000E","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T4 #51000A","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR #A38300","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_COLOR_T1 #FFE374","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_T2 #EDC520","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_T3 #806600","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_T2 #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":"!define DATA_COLOR #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":"!define USER_COLOR #000000","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":"skinparam Package {","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" BackgroundColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" FontSize 16","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":"skinparam Class {","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" FontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":" FontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":" BorderColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" StereotypeFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":"skinparam Actor {","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" BorderColor USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" Color USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"skinparam Sequence {","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" MessageAlign center","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":" BoxFontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" BoxPadding 0","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" BoxFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":"skinparam Participant {","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":" FontColor #FFFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":" Padding 20","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"skinparam ArrowFontStyle bold","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":"skinparam MinClassWidth 50","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"yingx9"},"content":"skinparam ParticipantPadding 10","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"yingx9"},"content":"skinparam Shadowing false","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":"skinparam DefaultTextAlignment center","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"yingx9"},"content":"skinparam packageStyle Rectangle","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"yingx9"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"yingx9"},"content":"hide members","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"yingx9"},"content":"hide circle","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"JoanneJo":2,"yingx9":81}},{"path":"docs/team/BenjaminNg.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"# Benjamin Ng - Project Portfolio Page","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"## Overview","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"bnjm2000":6}},{"path":"docs/team/JoanneAng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"JoanneJo"},"content":"# Joanne Ang - Project Portfolio Page","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"## Overview","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"JoanneJo":6}},{"path":"docs/team/WuXingyu.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"# Wu Xingyu - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"DavinciDelta":6}},{"path":"docs/team/YingXia.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"# Loke Ying Xia - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"yingx9":6}},{"path":"docs/team/ashokbalaji.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"# Ashok Balaji - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"000verflow":6}},{"path":"src/main/java/seedu/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"public class AddCommand extends Command{","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":" public AddCommand(){","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":" args \u003d new String[]{\"id\", \"t\", \"a\", \"tag\", \"i\", \"g\"};","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":" aliasArgs \u003d new String[]{\"id\", \"title\", \"author\", \"tag\", \"isbn\", \"genre\"};","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" required \u003d new boolean[]{true, true, true, true, true, false};","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":" public void execute(String statement, Parser parser) throws","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":" IllegalStateException, NumberFormatException, SysLibException {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":" String[] values \u003d parseArgument(statement);","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"JoanneJo"},"content":" validate(statement, values);","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"JoanneJo"},"content":" String title \u003d values[1];","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"JoanneJo"},"content":" String tag \u003d values[3];","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"JoanneJo"},"content":" if (tag.equalsIgnoreCase(\"b\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"JoanneJo"},"content":" parser.resourceList.add(Parser.createBook(values));","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"JoanneJo"},"content":" System.out.println(\"This book is added: \" + title);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":" throw new SysLibException(\"Please enter a valid tag.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":1,"bnjm2000":3,"JoanneJo":12,"DavinciDelta":13}},{"path":"src/main/java/seedu/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" protected String[] args;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" protected String[] aliasArgs;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" protected boolean[] required;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":" public abstract void execute(String statement, Parser parser) throws","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":" IllegalArgumentException, IllegalStateException, SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" /*","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" validate will include str","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" public void validate(String statement, String[] value) throws IllegalArgumentException{","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" statement \u003d statement.toLowerCase();","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" for(int pointer \u003d 0; pointer \u003c args.length; pointer ++) {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" if(value[pointer] !\u003d null){","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" String arg \u003d validateArg(statement, pointer);","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" statement \u003d statement.replaceAll(arg+ \"\\\\s*\" + Pattern.quote(value[pointer].toLowerCase()), \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" if (!statement.isBlank()){","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(\"Unknown variable/command: \" + statement);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"DavinciDelta"},"content":" public String validateArg(String statement, int pointer){","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" String arg \u003d \"/\" + args[pointer] + \" \";","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"DavinciDelta"},"content":" int firstindex \u003d statement.indexOf(arg);","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"DavinciDelta"},"content":" if (firstindex \u003d\u003d -1){","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"DavinciDelta"},"content":" arg \u003d \"/\" + aliasArgs[pointer] + \" \";","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DavinciDelta"},"content":" firstindex \u003d statement.indexOf(arg);","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"DavinciDelta"},"content":" } else if (!aliasArgs[pointer].equals(args[pointer])){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DavinciDelta"},"content":" if (statement.contains(\"/\" + aliasArgs[pointer] + \" \")){","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(\"Duplicate instances of\" + arg","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"DavinciDelta"},"content":" + \", \" + arg + \" and /\" + aliasArgs[pointer] + \" mean the same\");","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"DavinciDelta"},"content":" int secondIndex \u003d statement.indexOf(arg, firstindex + arg.length());","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"DavinciDelta"},"content":" if(secondIndex !\u003d -1){","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(\"Duplicate instances of \" + arg);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"DavinciDelta"},"content":" return arg;","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"DavinciDelta"},"content":" public String[] parseArgument(String statement) throws IllegalArgumentException, IllegalStateException {","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"DavinciDelta"},"content":" String[] orderedArgs \u003d new String[args.length];","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"DavinciDelta"},"content":" for(int pointer \u003d 0; pointer \u003c args.length; pointer ++) {","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"DavinciDelta"},"content":" orderedArgs[pointer] \u003d getMatch(statement, pointer);","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"DavinciDelta"},"content":" if(orderedArgs[pointer] \u003d\u003d null \u0026\u0026 required[pointer]){","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(args[pointer] + \" is missing in the argument!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"DavinciDelta"},"content":" return orderedArgs;","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"DavinciDelta"},"content":" public String getMatch(String statement, int pointer){","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"DavinciDelta"},"content":" String key \u003d args[pointer];","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"DavinciDelta"},"content":" Pattern pattern \u003d Pattern.compile(\"/\" + key + \" (.+?)(?\u003d\\\\s?/|$)\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"DavinciDelta"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"DavinciDelta"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"DavinciDelta"},"content":" return matcher.group(1).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"DavinciDelta"},"content":" if (aliasArgs[pointer] !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"DavinciDelta"},"content":" pattern \u003d Pattern.compile(\"/\" + aliasArgs[pointer] + \" (.+?)(?\u003d\\\\s?/|$)\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"DavinciDelta"},"content":" matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"DavinciDelta"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"DavinciDelta"},"content":" return matcher.group(1).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"DavinciDelta"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"DavinciDelta"},"content":" public int parseInt(String value){","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yingx9"},"content":" try {","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"DavinciDelta"},"content":" int num \u003d Integer.parseInt(value);","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"DavinciDelta"},"content":" if (0 \u003c num){","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"yingx9"},"content":" return num;","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException (\"The argument for id is not a valid number!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"yingx9"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException (\"The argument for id is not a number!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":3,"JoanneJo":2,"DavinciDelta":73,"yingx9":13}},{"path":"src/main/java/seedu/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" public DeleteCommand(){","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" args \u003d new String[]{\"id\"};","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" required \u003d new boolean[]{true};","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" public void execute(String statement, Parser parser) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" int id \u003d parseInt(parseArgument(statement)[0]);","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" assert id \u003e 0;","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" ArrayList\u003cResource\u003e toRemove \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" System.out.println(\"Looking for ID: \" + id + \"...\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" for (Resource r: parser.resourceList){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" Book b \u003d (Book) r;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" if (b.getId() \u003d\u003d id){","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":" System.out.println(\"This resource is removed: \");","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" System.out.println(b);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" toRemove.add(r);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" if(toRemove.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"No resources with id matching \" + id + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"DavinciDelta"},"content":" parser.resourceList.removeAll(toRemove);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":2,"bnjm2000":3,"JoanneJo":1,"DavinciDelta":25,"yingx9":7}},{"path":"src/main/java/seedu/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" static {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" // remove logs from showing in stdout","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" for (java.util.logging.Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" if (handler instanceof java.util.logging.ConsoleHandler) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" FileHandler fileHandler \u003d new FileHandler(\"logs/findCommandLogs.log\", true);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" fileHandler.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" LOGGER.addHandler(fileHandler);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" LOGGER.setLevel(Level.INFO);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" LOGGER.log(Level.SEVERE, \"Failed to set up log file handler\", e);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":" public void execute(String statement, Parser parser) throws IllegalArgumentException {","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":" assert statement !\u003d null : \"Statement to execute cannot be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" assert parser !\u003d null : \"Parser must not be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" LOGGER.log(Level.INFO, \"Executing ExitCommand...\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" ui.showExitMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"bnjm2000":42}},{"path":"src/main/java/seedu/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"000verflow"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":" private static final String INVALID_ARGUMENT_MESSAGE \u003d \"Please use the format \u0027find [/t TITLE OR \"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":" + \"/i ISBN OR /a AUTHOR OR /id ID]\u0027\\n\" + \"____________________________________________________________\";","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":" private static final String NO_RESOURCE_FOUND_MESSAGE \u003d \"There are no resources found matching the given filters.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" private static final String RESOURCE_FOUND_MESSAGE \u003d \"Here are resources that matched the given filters:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":" static {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":" // remove logs from showing in stdout","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"000verflow"},"content":" for (java.util.logging.Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"000verflow"},"content":" if (handler instanceof java.util.logging.ConsoleHandler) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":" FileHandler fileHandler \u003d new FileHandler(\"logs/findCommandLogs.log\", true);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":" fileHandler.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"000verflow"},"content":" LOGGER.addHandler(fileHandler);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"000verflow"},"content":" LOGGER.setLevel(Level.INFO);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"000verflow"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"000verflow"},"content":" LOGGER.log(Level.SEVERE, \"Failed to set up log file handler\", e);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"000verflow"},"content":" protected String title;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"000verflow"},"content":" protected String author;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"000verflow"},"content":" protected String isbn;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":" protected String id;","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":" protected UI ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"000verflow"},"content":" public FindCommand(){","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"000verflow"},"content":" args \u003d new String[]{\"id\", \"i\", \"a\", \"t\"};","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"000verflow"},"content":" aliasArgs \u003d new String[]{\"id\", \"isbn\", \"author\", \"title\"};","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"000verflow"},"content":" required \u003d new boolean[]{false, false, false, false};","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":" LOGGER.info(\"FindCommand instance created.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":" public void setTitle(String title){","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":" this.title \u003d title;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":" public String getTitle(){","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":" return this.title;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":" public void setAuthor(String author){","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"000verflow"},"content":" this.author \u003d author;","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":" public String getAuthor(){","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":" return this.author;","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"000verflow"},"content":" public void setISBN(String isbn){","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":" this.isbn \u003d isbn;","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"000verflow"},"content":" public String getISBN(){","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":" return this.isbn;","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":" public void setID(String id){","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"000verflow"},"content":" this.id \u003d id;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":" public String getID(){","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":" return this.id;","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"000verflow"},"content":" public void execute(String statement, Parser parser) throws IllegalArgumentException, SysLibException {","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":" assert statement !\u003d null \u0026\u0026 !statement.trim().isEmpty() : \"Statement to execute cannot be null or empty!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":" assert parser !\u003d null : \"Parser cannot be null!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":" String[] value \u003d parseArgument(statement);","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"000verflow"},"content":" validate(statement, value);","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":" if (value[3]\u003d\u003dnull \u0026\u0026 value[2]\u003d\u003dnull \u0026\u0026 value[1]\u003d\u003dnull \u0026\u0026 value[0]\u003d\u003dnull) {","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":" throw new IllegalArgumentException(INVALID_ARGUMENT_MESSAGE + System.lineSeparator());","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":" ArrayList\u003cResource\u003e matchedResources \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":" for (Resource r: parser.resourceList){","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":" Book b \u003d (Book) r;","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":" if (b.getTitle().equals(value[3]) || b.getISBN().equals(value[1]) || b.getAuthor().equals(value[2])){","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":" matchedResources.add(b);","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":" if (matchedResources.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":" LOGGER.warning(\"No resources matched the given filters.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":" System.out.println(NO_RESOURCE_FOUND_MESSAGE);","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"000verflow"},"content":" ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"000verflow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"000verflow"},"content":" LOGGER.info(\"Resources matched the given filters.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"000verflow"},"content":" System.out.println(RESOURCE_FOUND_MESSAGE);","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"000verflow"},"content":" for (Resource r : matchedResources) {","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"000verflow"},"content":" System.out.println(r);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"000verflow"},"content":" ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":113,"yingx9":7}},{"path":"src/main/java/seedu/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" private static final Logger logger \u003d Logger.getLogger(HelpCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" static {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" // remove logs from showing in stdout","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" for (java.util.logging.Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" if (handler instanceof java.util.logging.ConsoleHandler) {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" FileHandler fileHandler \u003d new FileHandler(\"logs/findCommandLogs.log\", true);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" fileHandler.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" LOGGER.addHandler(fileHandler);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" LOGGER.setLevel(Level.INFO);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" LOGGER.log(Level.SEVERE, \"Failed to set up log file handler\", e);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" public void execute(String statement, Parser parser) throws IllegalArgumentException {","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" assert statement !\u003d null : \"Statement to execute cannot be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" assert parser !\u003d null : \"Parser must not be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" logger.log(Level.INFO, \"Executing HelpCommand\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":" ui.showHelpMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":2,"bnjm2000":35,"yingx9":7}},{"path":"src/main/java/seedu/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"import static seedu.common.Messages.formatLineSeparator;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"import static seedu.common.Messages.formatLastLineDivider;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"import static seedu.common.Messages.formatFirstLine;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":" public static final String FILTER_MESSAGE \u003d formatFirstLine(\"Listing resources matching given filters: \");","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":" public static final String GENERIC_MESSAGE \u003d formatFirstLine(\"Listing all resources in the Library:\");","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":" public static final String ZERO_RESOURCES_MESSAGE \u003d formatLastLineDivider(\"There are currently 0 resources.\");","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":" private static String tagKeyword;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":" private static String genreKeyword;","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":" private static String feedbackToUser;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":" public ListCommand(){","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":" args \u003d new String[]{\"tag\", \"g\"};","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":" aliasArgs \u003d new String[]{\"tag\", \"genre\"};","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":" required \u003d new boolean[]{false, false};","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" public void execute(String statement, Parser parser) throws SysLibException, IllegalArgumentException {","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" feedbackToUser \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" String[] values \u003d parseArgument(statement);","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" validate(statement, values);","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" filterResources(values, parser.resourceList);","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" System.out.println(feedbackToUser);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" public void filterResources(String[] values, List\u003cResource\u003e resourceList) throws SysLibException{","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" boolean hasFilters \u003d hasFilters((values));","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" List\u003cResource\u003e matchedResources \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" if(hasFilters){","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" boolean isTagEqualToKeyword \u003d true;","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" boolean isGenreEqualToKeyword \u003d true;","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":" for (int i\u003d0; i \u003cresourceList.size(); i++){","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" Resource resource \u003d resourceList.get(i);","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":" if(tagKeyword !\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":" String resourceTag \u003d resource.getTag();","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":" isTagEqualToKeyword \u003d resourceTag.equals(tagKeyword);","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" if(genreKeyword !\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" isGenreEqualToKeyword \u003d Resource.hasGenre(resource, genreKeyword);","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":" if (isTagEqualToKeyword \u0026\u0026 isGenreEqualToKeyword){","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":" matchedResources.add(resource);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":" feedbackToUser +\u003d FILTER_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":" displayResourcesDetails(matchedResources);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"yingx9"},"content":" } else{","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":" feedbackToUser +\u003d GENERIC_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"yingx9"},"content":" displayResourcesDetails(resourceList);","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"yingx9"},"content":" public String displayResourcesDetails(List\u003cResource\u003e resourcesList) {","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"yingx9"},"content":" String messageToDisplay \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"yingx9"},"content":" if (resourcesList.isEmpty()){","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"yingx9"},"content":" messageToDisplay +\u003d ZERO_RESOURCES_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"yingx9"},"content":" } else {","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"yingx9"},"content":" for (int i \u003d 0; i \u003c resourcesList.size(); i +\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"yingx9"},"content":" String resourceDetails \u003d resourcesList.get(i).toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"yingx9"},"content":" messageToDisplay +\u003d formatLineSeparator(i+1 + \". \" + resourceDetails);","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"yingx9"},"content":" messageToDisplay +\u003d formatLastLineDivider(\"There are currently \" + resourcesList.size() +","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"yingx9"},"content":" \" resource(s).\");","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":107,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"yingx9"},"content":" feedbackToUser +\u003d messageToDisplay;","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"yingx9"},"content":" return messageToDisplay;","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":112,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":113,"author":{"gitId":"yingx9"},"content":" public static boolean hasFilters(String[] values) throws SysLibException {","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"yingx9"},"content":" tagKeyword \u003d null;","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"yingx9"},"content":" genreKeyword \u003d null;","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":117,"author":{"gitId":"yingx9"},"content":" boolean hasFilters \u003d true;","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"yingx9"},"content":" if (values[0] \u003d\u003d null \u0026\u0026 values[1] \u003d\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"yingx9"},"content":" return false;","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":122,"author":{"gitId":"yingx9"},"content":" if (values[0] !\u003d null) {","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"yingx9"},"content":" tagKeyword \u003d values[0];","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"yingx9"},"content":" if (values[1] !\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"yingx9"},"content":" genreKeyword \u003d values[1];","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":129,"author":{"gitId":"yingx9"},"content":" return hasFilters;","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":131,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":132,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":133,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":2,"bnjm2000":1,"yingx9":130}},{"path":"src/main/java/seedu/common/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"package seedu.common;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.SEPARATOR_LINEDIVIDER;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"public class Messages {","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":" public static String formatFirstLine(String message){","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":" return LINESEPARATOR + message + LINESEPARATOR + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":" public static String formatLineSeparator(String message){","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":" return message + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":" public static String formatLastLineDivider(String message){","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":" return LINESEPARATOR + message + SEPARATOR_LINEDIVIDER;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"yingx9":17}},{"path":"src/main/java/seedu/data/Book.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"public class Book extends Resource {","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":" private String author;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":" //private String synopsis;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":" private String[] genres;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":" private int id;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":" public Book(String title, String isbn, String author, String[] genres, int id) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" super(title, isbn);","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" setTag(\"B\");","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" setAuthor(author);","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":" //setSynopsis(synopsis);","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":" setGenre(genres);","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":" setId(id);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" public String getAuthor() {","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" return author;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" public void setAuthor(String author) {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" this.author \u003d author;","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":" /*public String getSynopsis() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" return synopsis;","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" public void setSynopsis(String synopsis) {","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" this.synopsis \u003d synopsis;","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"JoanneJo"},"content":" }*/","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"JoanneJo"},"content":" public String[] getGenre() {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"JoanneJo"},"content":" return genres;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"JoanneJo"},"content":" public void setGenre(String[] genres) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"JoanneJo"},"content":" this.genres \u003d genres;","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"JoanneJo"},"content":" public String getGenreString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":" return String.join(\", \", genres);","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"JoanneJo"},"content":" public int getId() {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"JoanneJo"},"content":" return id;","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"JoanneJo"},"content":" public void setId(int id) {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"JoanneJo"},"content":" this.id \u003d id;","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":" StringBuilder genreString \u003d new StringBuilder();","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":" if (getGenre()[0] \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"JoanneJo"},"content":" genreString.append(\"-\");","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"JoanneJo"},"content":" genreString.append(java.util.Arrays.toString(getGenre()).replace(\"[\", \"\").replace(\"]\", \"\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"JoanneJo"},"content":" return \"[\" + getTag() + \"] \" + \" ID: \" + getId() + \" Title: \" + getTitle() + \" ISBN: \" + getISBN() + \" Author: \"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"bnjm2000"},"content":" + getAuthor() + \" Genre: \" + genreString;","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":1,"bnjm2000":1,"JoanneJo":37,"DavinciDelta":23,"yingx9":4}},{"path":"src/main/java/seedu/data/Resource.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"public class Resource {","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":" private String title;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":" private boolean isBorrowed;","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":" private Integer copies;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":" private String tag;","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":" private String isbn;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" public Resource(String title, String isbn){","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" setTitle(title);","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" setBorrowed(false);","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" setISBN(isbn);","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" setCopies(1);","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":" setTag(\"\");","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" public String getTitle() {","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" return title;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" public void setTitle(String title) {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" this.title \u003d title;","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" public boolean isBorrowed() {","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" return isBorrowed;","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" public void setBorrowed(boolean borrowed) {","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" isBorrowed \u003d borrowed;","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"DavinciDelta"},"content":" public Integer getCopies() {","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"DavinciDelta"},"content":" return copies;","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"DavinciDelta"},"content":" public void setCopies(Integer copies) {","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DavinciDelta"},"content":" this.copies \u003d copies;","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"DavinciDelta"},"content":" public String getTag() {","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"DavinciDelta"},"content":" return tag;","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"DavinciDelta"},"content":" public void setTag(String tag) {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"DavinciDelta"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"DavinciDelta"},"content":" public String getISBN() {","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"DavinciDelta"},"content":" return isbn;","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"DavinciDelta"},"content":" public void setISBN(String isbn) {","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"DavinciDelta"},"content":" this.isbn \u003d isbn;","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" return \"[\" + tag + \"] \" + title;","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":" public static boolean hasGenre(Resource resource, String genre){","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":" Book bookResource;","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" if (resource instanceof Book) {","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":" bookResource \u003d (Book) resource;","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" String[] genres \u003d bookResource.getGenre();","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" if (genres[0] \u003d\u003d null ){","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" return false;","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":" for(int j \u003d0; j \u003c genres.length; j ++){","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":" if (genres[j].equals(genre)){","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":" return true;","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":" return false;","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":1,"DavinciDelta":53,"yingx9":25}},{"path":"src/main/java/seedu/data/SysLibException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"public class SysLibException extends Exception {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":" public SysLibException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"000verflow":1,"JoanneJo":6}},{"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":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Main entry-point for the java.duke.Duke application.","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":" private static UI ui;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":" private static Parser parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":" public Duke(){","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":" new Duke().run();","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":" public void run(){","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" while (true) {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" String response \u003d ui.readCommand();","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" parser.process(response);","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" if (response.equalsIgnoreCase(\"exit\")){","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":" break;","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"000verflow":19,"bnjm2000":2,"-":11,"yingx9":2}},{"path":"src/main/java/seedu/parser/DeleteParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"public class DeleteParser {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":" public static String parseDelete(String statement) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" String inputPattern \u003d \"/id (\\\\d+)\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" Pattern pattern \u003d Pattern.compile(inputPattern);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" boolean matchFound \u003d matcher.find();","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DavinciDelta"},"content":" if (matchFound){","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" return matcher.group(1).trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" \"\u0027delete /id ID\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" } catch (IllegalStateException | SysLibException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" \"\u0027delete /id ID\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DavinciDelta":26}},{"path":"src/main/java/seedu/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.AddCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.DeleteCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.FindCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.ListCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.HelpCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.SEPARATOR_LINEDIVIDER;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"import java.util.List;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"public class Parser {","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":" public List\u003cResource\u003e resourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":" public HashMap\u003cString, Command\u003e commandProcessor \u003d new HashMap\u003c\u003e() {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":" {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":" put(\"list\", new ListCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" put(\"delete\", new DeleteCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":" put(\"find\", new FindCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" put(\"help\", new HelpCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" put(\"exit\", new ExitCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" put(\"add\", new AddCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" };","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" public void process(String response) {","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" String command \u003d response.split(\" \")[0];","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" if (commandProcessor.containsKey(command)) {","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":" String statement \u003d removeFirstWord(response);","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" try {","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" commandProcessor.get(command).execute(statement, this);","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":" } catch (IllegalArgumentException | IllegalStateException | SysLibException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":" } else {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":" System.out.println(\"no commands found. Enter \\\"help\\\" for a list of commands.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":" public static String removeFirstWord(String response) {","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" int index \u003d response.indexOf(\" \");","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" return \"\";","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":" return response.substring(index + 1);","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":" public List\u003cResource\u003e getResourceList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"JoanneJo"},"content":" return resourceList;","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"JoanneJo"},"content":" public static String[] parseAddCommand(String statement) throws SysLibException {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"JoanneJo"},"content":" String inputPattern \u003d \"(.+?) /tag (.)(.+)\";","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"JoanneJo"},"content":" Pattern pattern \u003d Pattern.compile(inputPattern);","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"JoanneJo"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"JoanneJo"},"content":" boolean matchFound \u003d matcher.find();","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"JoanneJo"},"content":" if (matchFound) {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"JoanneJo"},"content":" if (matcher.group(2).equalsIgnoreCase(\"b\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"JoanneJo"},"content":" return parseAddBook(statement);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"JoanneJo"},"content":" public static String[] parseAddBook(String statement) throws SysLibException, IllegalStateException {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"JoanneJo"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"JoanneJo"},"content":" String inputPattern \u003d \"/id (.+?) /t (.+?) /a (.+?) /tag (.+?) /i (.+)\";","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"JoanneJo"},"content":" String genrePattern \u003d \"(.+) /g (.+)\";","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"JoanneJo"},"content":" Pattern pattern \u003d Pattern.compile(inputPattern);","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"JoanneJo"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"JoanneJo"},"content":" boolean matchFound \u003d matcher.find();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"JoanneJo"},"content":" Pattern gPattern \u003d Pattern.compile(genrePattern);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"JoanneJo"},"content":" Matcher gMatcher \u003d gPattern.matcher(matcher.group(5));","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"JoanneJo"},"content":" boolean gMatchFound \u003d gMatcher.find();","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"JoanneJo"},"content":" String[] args \u003d new String[6];","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"JoanneJo"},"content":" if (matchFound) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"JoanneJo"},"content":" args[0] \u003d matcher.group(1).trim(); // id","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"JoanneJo"},"content":" args[1] \u003d matcher.group(2).trim(); // title","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"JoanneJo"},"content":" args[2] \u003d matcher.group(3).trim(); // author","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"JoanneJo"},"content":" args[3] \u003d matcher.group(4).trim(); // tag","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"JoanneJo"},"content":" if (gMatchFound) {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"JoanneJo"},"content":" args[4] \u003d gMatcher.group(1).trim(); // isbn","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"JoanneJo"},"content":" args[5] \u003d gMatcher.group(2).trim(); // genre","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"JoanneJo"},"content":" args[4] \u003d matcher.group(5).trim(); // isbn","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"JoanneJo"},"content":" if (args[0].isEmpty() || args[1].isEmpty() || args[2].isEmpty() || args[3].isEmpty()","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"JoanneJo"},"content":" || args[4].isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"bnjm2000"},"content":" throw new SysLibException(\"Please state the id, title, author, tag, and ISBN.\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"yingx9"},"content":" SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":113,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":117,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"JoanneJo"},"content":" return args;","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"JoanneJo"},"content":" } catch (IllegalStateException | SysLibException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":122,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"JoanneJo"},"content":" public static Book createBook(String[] args) throws IllegalStateException, NumberFormatException {","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"JoanneJo"},"content":" int id;","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"JoanneJo"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"JoanneJo"},"content":" id \u003d Integer.parseInt(args[0]); // id","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"JoanneJo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"yingx9"},"content":" throw new NumberFormatException(\"Please enter a valid id.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":131,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"JoanneJo"},"content":" String title \u003d args[1]; // title","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"JoanneJo"},"content":" String author \u003d args[2]; // author","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"JoanneJo"},"content":" String isbn \u003d args[4]; // isbn","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"JoanneJo"},"content":" String genre;","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"JoanneJo"},"content":" String[] genres \u003d new String[1];","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"JoanneJo"},"content":" if (args[5] !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"JoanneJo"},"content":" genre \u003d args[5]; // genre","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"JoanneJo"},"content":" genres \u003d genre.split(\", \");","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"JoanneJo"},"content":" return new Book(title, isbn, author, genres, id);","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"000verflow"},"content":" public Matcher parseFindCommand(String command) throws SysLibException{","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"000verflow"},"content":" // Define a regular expression pattern to match optional flags and their values","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"000verflow"},"content":" Pattern pattern \u003d Pattern.compile(\"/(t|a|i|id)\\\\s+([^/]+)\");","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"000verflow"},"content":" return pattern.matcher(command);","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":12,"bnjm2000":2,"JoanneJo":93,"DavinciDelta":1,"yingx9":47}},{"path":"src/main/java/seedu/ui/UI.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.ui;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"public class UI {","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":" public static final String LINESEPARATOR \u003d System.lineSeparator();","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":" public static final String LINEDIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":" public static final String SEPARATOR_LINEDIVIDER \u003d LINESEPARATOR + LINEDIVIDER;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"000verflow"},"content":" protected static String logo \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":" \" ____ _ _ _ ____ _ ___ \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":" \"/ ___| _ _ ___| | (_) |__ / ___| | |_ _|\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":" \"\\\\___ \\\\| | | / __| | | | \u0027_ \\\\ | | | | | | \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":" \" ___) | |_| \\\\__ \\\\ |___| | |_) | | |___| |___ | | \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":" \"|____/ \\\\__, |___/_____|_|_.__/ \\\\____|_____|___|\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":" \" |___/ \";","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":" protected Scanner myScanner;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" public UI(){","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":" this.myScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":" public void showWelcomeMessage(){","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" System.out.println(logo);","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"000verflow"},"content":" System.out.println(\"What do you want to do?\");","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"000verflow"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"000verflow"},"content":" public void showExitMessage(){","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"Bye, hope to see you again soon!\");","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":" public void showHelpMessage(){","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"Commands available:\");","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"add: adds a new resource to the library inventory.\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE])\");","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"delete: deletes the resource with the specified ID from the library inventory. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. delete /id 123456789)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"list: list all resources OR filter by certain tags or genre.\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" \"(e.g. list /tag B /g Fiction\");","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"exit: displays a farewell message and exits the program (e.g. exit)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"For more information, please refer to our user guide at:\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"bnjm2000"},"content":" \"https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html\");","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"bnjm2000"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":" public void showError(Exception e){","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":" System.out.println(e);","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":" public String readCommand(){","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":" System.out.print(\"\u003e \");","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":" return myScanner.nextLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":" public void showLine(){","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":" System.out.println(LINEDIVIDER);","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":41,"bnjm2000":15,"yingx9":7}},{"path":"src/test/java/seedu/DukeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu;","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":"-"},"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":{"000verflow":1,"-":11}},{"path":"src/test/java/seedu/commands/AddCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"JoanneJo"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":" private final Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"JoanneJo"},"content":" private final AddCommand addCommand \u003d new AddCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"JoanneJo"},"content":" public void addCommandValidData() throws SysLibException {","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"JoanneJo"},"content":" addCommand.execute(\"/id 123456789 /t The Minds of Billy Milligan /a Daniel Keyes /tag B /i 987654321 \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"JoanneJo"},"content":" \"/g Non-Fiction, Biography\", parser);","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"JoanneJo"},"content":" Book newBook \u003d (Book) parser.getResourceList().get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getId(), 123456789);","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getTitle(), \"The Minds of Billy Milligan\");","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getAuthor(), \"Daniel Keyes\");","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getTag(), \"B\");","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getISBN(), \"987654321\");","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getGenreString(), \"Non-Fiction, Biography\");","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"JoanneJo"},"content":" public void addCommandOutput() throws SysLibException {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"JoanneJo"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"JoanneJo"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"JoanneJo"},"content":" addCommand.execute(\"/id 123456789 /t The Minds of Billy Milligan /a Daniel Keyes /tag B /i 987654321 \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"JoanneJo"},"content":" \"/g Non-Fiction, Biography\", parser);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"JoanneJo"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":" String expectedOutput \u003d \"This book is added: The Minds of Billy Milligan\" + System.lineSeparator() +","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"JoanneJo"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"JoanneJo"},"content":" public void addCommandInvalidId() {","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"JoanneJo"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003eaddCommand.execute(\"/id abcd \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":" \"/t The Minds of Billy Milligan /a Daniel Keyes /tag B /i 987654321\", parser));","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":" public void addCommandInsufficientData() {","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003eaddCommand.execute(\"/id \", parser));","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"JoanneJo":58}},{"path":"src/test/java/seedu/commands/DeleteCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" void execute() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DavinciDelta"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" deleteCommand.execute(\"/id 1111\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" String expectedOutput \u003d \"Looking for ID: 1111...\" + System.lineSeparator()+","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" \"No resources with id matching 1111\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DavinciDelta":31}},{"path":"src/test/java/seedu/commands/ExitCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"class ExitCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" ExitCommand exitCommand \u003d new ExitCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" exitCommand.execute(\"\", parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Bye, hope to see you again soon!\" + System.lineSeparator()+","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":28}},{"path":"src/test/java/seedu/commands/FindCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"000verflow"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":"public class FindCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":" private FindCommand findCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" private Parser parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" findCommand \u003d new FindCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"000verflow"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"000verflow"},"content":" // Mock resourceList for Parser","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"000verflow"},"content":" parser.resourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"000verflow"},"content":" String[] genreTest1 \u003d {\"horror\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":" String[] genreTest2 \u003d {\"comedy\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":" parser.resourceList.add(new Book(\"Title1\", \"ISBN1\", \"Author1\", genreTest1, 1234));","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"000verflow"},"content":" parser.resourceList.add(new Book(\"Title2\", \"ISBN2\", \"Author2\", genreTest2, 5678));","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"000verflow"},"content":" outContent.reset(); // Clearing any old content","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"000verflow"},"content":" System.setOut(new PrintStream(outContent)); // Redirect System.out","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"000verflow"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"000verflow"},"content":" void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"000verflow"},"content":" System.setOut(originalOut); // Reset System.out after each test","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":" void testSetAndGetTitle() {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"000verflow"},"content":" findCommand.setTitle(\"TitleTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"000verflow"},"content":" assertEquals(\"TitleTest\", findCommand.getTitle());","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":" void testSetAndGetAuthor() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":" findCommand.setAuthor(\"AuthorTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":" assertEquals(\"AuthorTest\", findCommand.getAuthor());","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":" void testSetAndGetISBN() {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":" findCommand.setISBN(\"ISBNTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":" assertEquals(\"ISBNTest\", findCommand.getISBN());","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"000verflow"},"content":" void testSetAndGetID() {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":" findCommand.setID(\"IDTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":" assertEquals(\"IDTest\", findCommand.getID());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":" void testExecuteWithInvalidFlag() {","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"000verflow"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e findCommand.execute(\"/x InvalidFlag\", parser));","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"000verflow"},"content":" void testExecuteWithNoFilter() {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":" assertThrows(AssertionError.class, () -\u003e findCommand.execute(\"\", parser));","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"000verflow"},"content":" void testExecuteFindTitleMatch() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/t Title1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Title1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":" void testExecuteFindAuthorMatch() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/a Author1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Author1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"000verflow"},"content":" void testExecuteFindISBNMatch() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/i ISBN1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"ISBN1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":" void testExecuteNoMatchesFound() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/t Title3\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"There are no resources found matching the given filters.\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":" void testExecuteMultipleFilters() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/t Title1 /a Author1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Title1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Author1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"000verflow"},"content":" void testExecuteInvalidFormat() {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"000verflow"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e findCommand.execute(\"find /z Invalid\", parser));","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"000verflow"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"000verflow":114}},{"path":"src/test/java/seedu/commands/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"class HelpCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":" void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" helpCommand.execute(\"\", parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Commands available:\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":" \"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" \"/tag TAG /i ISBN [/g GENRE])\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" \"delete: deletes the resource with the specified ID from the library inventory. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. delete /id 123456789)\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" \"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" \"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() + \"exit: displays a farewell message and exits the program (e.g. exit)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":" \"For more information, please refer to our user guide at:\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" \"https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":38,"yingx9":1}},{"path":"src/test/java/seedu/commands/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"import seedu.util.TestUtil;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"import static seedu.commands.ListCommand.GENERIC_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"import static seedu.commands.ListCommand.FILTER_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"import static seedu.commands.ListCommand.ZERO_RESOURCES_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":" private List\u003cResource\u003e emptyResourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":" private List\u003cResource\u003e testResourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" private TestUtil testUtil \u003d new TestUtil();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" private Command listCommand \u003d new ListCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" void execute() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" testResourceList \u003d TestUtil.fillTestList();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" assertEmptyListMessage();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" assertListByTagBehavior();","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":" assertListByGenreBehavior();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" assertNoFilteredListDisplay();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" private void assertEmptyListMessage() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" String outputMessage \u003d testUtil.getOutputMessage(listCommand, \"\", emptyResourceList);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":" String expectedMessage \u003d GENERIC_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":" expectedMessage +\u003d ZERO_RESOURCES_MESSAGE + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" assertEquals(expectedMessage, outputMessage);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" private void assertListByTagBehavior() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" parser.resourceList \u003d testResourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003elistCommand.execute(\"/tag\", parser));","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":" private void assertListByGenreBehavior() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":" parser.resourceList \u003d testResourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003elistCommand.execute(\"/g\", parser));","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" private void assertNoFilteredListDisplay() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" String outputMessage \u003d testUtil.getOutputMessage(listCommand, \"/g Thriller\", testResourceList);","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":" String expectedMessage \u003d FILTER_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":" expectedMessage +\u003d ZERO_RESOURCES_MESSAGE + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":" assertEquals(expectedMessage, outputMessage);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yingx9":72}},{"path":"src/test/java/seedu/parser/DeleteParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"class DeleteParserTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":" public void testParseDeleteWithValidInput() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" String statement \u003d \"delete /id 1\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":" String result \u003d DeleteParser.parseDelete(statement);","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" assertEquals(\"1\", result);","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" public void testParseDeleteWithInvalidInput() {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" String statement \u003d \"delete /t hello\";","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" assertThrows(SysLibException.class, () -\u003e DeleteParser.parseDelete(statement));","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":23}},{"path":"src/test/java/seedu/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"class ParserTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" public void testProcessExitCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"exit\";","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Bye, hope to see you again soon!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":" public void testProcessHelpCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Commands available:\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bnjm2000"},"content":" \"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"bnjm2000"},"content":" \"/tag TAG /i ISBN [/g GENRE])\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"bnjm2000"},"content":" \"delete: deletes the resource with the specified ID from the library inventory. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. delete /id 123456789)\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"bnjm2000"},"content":" \"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"bnjm2000"},"content":" \"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() + \"exit: displays a farewell message and exits the program (e.g. exit)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bnjm2000"},"content":" \"For more information, please refer to our user guide at:\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bnjm2000"},"content":" \"https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bnjm2000"},"content":" public void testProcessUnknownCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"bye\";","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"no commands found. Enter \\\"help\\\" for a list of commands.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bnjm2000"},"content":" public void testProcessCommands() {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"bnjm2000"},"content":" //Test add","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"add /id 1 /t Surrounded by Idiots /a Thomas Erikson \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"bnjm2000"},"content":" \"/tag B /i 9781250255174 /g Self-help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"This book is added: Surrounded by Idiots\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();;","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"bnjm2000"},"content":" //Add second book","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"add /id 2 /t The Subtle Art of Not Giving a F*ck /a Mark Manson \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"bnjm2000"},"content":" \"/tag B /i 9780062457714 /g Self-help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"This book is added: The Subtle Art of Not Giving a F*ck\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"yingx9"},"content":" \"____________________________________________________________\" + System.lineSeparator()","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"yingx9"},"content":" + System.lineSeparator();;","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"bnjm2000"},"content":" //Test list","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"Listing all resources in the Library:\" + System.lineSeparator() + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"bnjm2000"},"content":" \"1. [B] ID: 1 Title: Surrounded by Idiots ISBN: 9781250255174 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"bnjm2000"},"content":" \"Author: Thomas Erikson Genre: Self-help\" + System.lineSeparator()+","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"bnjm2000"},"content":" \"2. [B] ID: 2 Title: The Subtle Art of Not Giving a F*ck ISBN: 9780062457714 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"bnjm2000"},"content":" \"Author: Mark Manson Genre: Self-help\" + System.lineSeparator() + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"bnjm2000"},"content":" \"There are currently 2 resource(s).\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"bnjm2000"},"content":" //Test find","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"find /t The Subtle Art of Not Giving a F*ck\";","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"Here are resources that matched the given filters:\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"bnjm2000"},"content":" \"[B] ID: 2 Title: The Subtle Art of Not Giving a F*ck ISBN: 9780062457714 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"bnjm2000"},"content":" \"Author: Mark Manson Genre: Self-help\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();;","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"bnjm2000"},"content":" //Negative find test","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"find /t No Such Book\";","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"000verflow"},"content":" expectedOutput +\u003d \"There are no resources found matching the given filters.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();;","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"bnjm2000"},"content":" //Test delete","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"delete /id 1\";","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"Looking for ID: 1...\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"bnjm2000"},"content":" \"This resource is removed: \" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":143,"author":{"gitId":"bnjm2000"},"content":" \"[B] ID: 1 Title: Surrounded by Idiots ISBN: 9781250255174 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":144,"author":{"gitId":"bnjm2000"},"content":" \"Author: Thomas Erikson Genre: Self-help\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"bnjm2000"},"content":" public void testParseAddCommand() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"bnjm2000"},"content":" // Test case 1: Valid input with /tag b","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"bnjm2000"},"content":" String statement1 \u003d \"add /id ID /t TITLE /a AUTHOR /tag b /i ISBN /g GENRE\";","lastModifiedDate":"2023-10-16"},{"lineNumber":153,"author":{"gitId":"bnjm2000"},"content":" String[] expectedArgs1 \u003d {\"ID\", \"TITLE\", \"AUTHOR\", \"b\", \"ISBN\", \"GENRE\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":154,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedArgs1, Parser.parseAddCommand(statement1));","lastModifiedDate":"2023-10-16"},{"lineNumber":155,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":156,"author":{"gitId":"bnjm2000"},"content":" // Test case 2: Invalid input (missing /tag b)","lastModifiedDate":"2023-10-16"},{"lineNumber":157,"author":{"gitId":"bnjm2000"},"content":" String statement2 \u003d \"add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN /g GENRE\";","lastModifiedDate":"2023-10-16"},{"lineNumber":158,"author":{"gitId":"bnjm2000"},"content":" assertThrows(SysLibException.class, () -\u003e Parser.parseAddCommand(statement2));","lastModifiedDate":"2023-10-16"},{"lineNumber":159,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":160,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":161,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":162,"author":{"gitId":"bnjm2000"},"content":" public void testParseAddBook() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":163,"author":{"gitId":"bnjm2000"},"content":" // Test case 1: Valid input with /g GENRE","lastModifiedDate":"2023-10-16"},{"lineNumber":164,"author":{"gitId":"bnjm2000"},"content":" String statement1 \u003d \"/id ID /t TITLE /a AUTHOR /tag b /i ISBN /g GENRE\";","lastModifiedDate":"2023-10-16"},{"lineNumber":165,"author":{"gitId":"bnjm2000"},"content":" String[] expectedArgs1 \u003d {\"ID\", \"TITLE\", \"AUTHOR\", \"b\", \"ISBN\", \"GENRE\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":166,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedArgs1, Parser.parseAddBook(statement1));","lastModifiedDate":"2023-10-16"},{"lineNumber":167,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":168,"author":{"gitId":"bnjm2000"},"content":" // Test case 2: Valid input without /g GENRE","lastModifiedDate":"2023-10-16"},{"lineNumber":169,"author":{"gitId":"bnjm2000"},"content":" String statement2 \u003d \"/id ID /t TITLE /a AUTHOR /tag b /i ISBN\";","lastModifiedDate":"2023-10-16"},{"lineNumber":170,"author":{"gitId":"bnjm2000"},"content":" String[] expectedArgs2 \u003d {\"ID\", \"TITLE\", \"AUTHOR\", \"b\", \"ISBN\", null};","lastModifiedDate":"2023-10-16"},{"lineNumber":171,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedArgs2, Parser.parseAddBook(statement2));","lastModifiedDate":"2023-10-16"},{"lineNumber":172,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":173,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":174,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":175,"author":{"gitId":"bnjm2000"},"content":" public void testCreateBook() {","lastModifiedDate":"2023-10-16"},{"lineNumber":176,"author":{"gitId":"bnjm2000"},"content":" String[] args \u003d {\"123\", \"CS2113T\", \"W11\", \"B\", \"1234\", \"Horror\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":177,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":178,"author":{"gitId":"bnjm2000"},"content":" Book book \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":179,"author":{"gitId":"bnjm2000"},"content":" book \u003d Parser.createBook(args);","lastModifiedDate":"2023-10-16"},{"lineNumber":180,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":181,"author":{"gitId":"bnjm2000"},"content":" int expectedId \u003d 123;","lastModifiedDate":"2023-10-16"},{"lineNumber":182,"author":{"gitId":"bnjm2000"},"content":" String expectedTitle \u003d \"CS2113T\";","lastModifiedDate":"2023-10-16"},{"lineNumber":183,"author":{"gitId":"bnjm2000"},"content":" String expectedAuthor \u003d \"W11\";","lastModifiedDate":"2023-10-16"},{"lineNumber":184,"author":{"gitId":"bnjm2000"},"content":" String expectedIsbn \u003d \"1234\";","lastModifiedDate":"2023-10-16"},{"lineNumber":185,"author":{"gitId":"bnjm2000"},"content":" String[] expectedGenres \u003d { \"Horror\" };","lastModifiedDate":"2023-10-16"},{"lineNumber":186,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":187,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedId, book.getId());","lastModifiedDate":"2023-10-16"},{"lineNumber":188,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedTitle, book.getTitle());","lastModifiedDate":"2023-10-16"},{"lineNumber":189,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedAuthor, book.getAuthor());","lastModifiedDate":"2023-10-16"},{"lineNumber":190,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedIsbn, book.getISBN());","lastModifiedDate":"2023-10-16"},{"lineNumber":191,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedGenres, book.getGenre());","lastModifiedDate":"2023-10-16"},{"lineNumber":192,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":193,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":194,"author":{"gitId":"bnjm2000"},"content":" public void testCreateBookInvalidId() {","lastModifiedDate":"2023-10-16"},{"lineNumber":195,"author":{"gitId":"bnjm2000"},"content":" String[] args \u003d {\"not_a_number\", \"Sample Title\", \"Sample Author\", \"\", \"Sample ISBN\", \"Sample Genre\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":196,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":197,"author":{"gitId":"bnjm2000"},"content":" assertThrows(NumberFormatException.class, () -\u003e Parser.createBook(args));","lastModifiedDate":"2023-10-16"},{"lineNumber":198,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":199,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"000verflow":1,"bnjm2000":195,"yingx9":3}},{"path":"src/test/java/seedu/util/TestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.util;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import seedu.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"public class TestUtil {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" public String getOutputMessage(Command c, String m) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" c.execute(m, parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" return outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" public String getOutputMessage(Command c, String m, List\u003cResource\u003e resourceList) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" parser.resourceList \u003d resourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" c.execute(m, parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" return outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" public static List\u003cResource\u003e fillTestList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" List\u003cResource\u003e testResourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" String[] genres \u003d {\"Horror\", \"Fiction\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" String[] genresAdventure \u003d {\"Adventure\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" String[] genresNull \u003d {null};","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" Resource test1 \u003d new Resource(\"title1\", \"123123\");","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" Book testBook \u003d new Book(\"title2\", \"123123\", \"author\", genres, 123123);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" Book testBook2 \u003d new Book(\"title3\", \"123123\", \"author\", genresAdventure, 123123);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" Book testBook3 \u003d new Book(\"title3\", \"123123\", \"author\", genresNull, 123123);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" testResourceList.add(test1);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":" testResourceList.add(testBook);","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":" testResourceList.add(testBook2);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" testResourceList.add(testBook3);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" return testResourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":32,"yingx9":20}}] +[{"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":"yingx9"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":46,"yingx9":1}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"|-------------------------------------------------------------------------|:-------------:|:-----------------------------------------:|:--------------------------------:|","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"| ![yingxia_portfolio.jpg](team/pictures/yingxia_portfolio.jpg) | Loke Ying Xia | [Github](https://github.com/yingx9) | [Portfolio](team/YingXia.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"| ![benjaminng_portfolio.jpeg](team/pictures/benjaminng_portfolio.jpeg) | Benjamin Ng | [Github](https://github.com/bnjm2000) | [Portfolio](team/BenjaminNg.md) |","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"| ![joanneang_portfolio.jpg](team/pictures/joanneang_portfolio.jpg) | Joanne Ang | [Github](https://github.com/JoanneJo) | [Portfolio](team/JoanneAng.md) |","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"| ![ashokbalaji_portfolio.jpg](./team/pictures/ashokbalaji_portfolio.jpg) | Ashok Balaji | [Github](https://github.com/000verflow) | [Portfolio](team/ashokbalaji.md) |","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Wu Xingyu | [Github](https://github.com/DavinciDelta) | [Portfolio](team/WuXingyu.md) |","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"bnjm2000":3,"JoanneJo":2,"-":1,"yingx9":2}},{"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":"JoanneJo"},"content":"## Setting Up \u0026 Getting Started","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"1. Fork the repo at https://github.com/AY2324S1-CS2113T-W11-1/tp.","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"2. Clone the fork into your computer.","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"## Design \u0026 Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"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":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"### Architecture","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" /\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"**Main components of SysLib Architecture**","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"SysLib currently consists of four main components:","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"- `UI`: User Interaction","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":"- `Parser`: Parsing User Response ","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":"- `Command`: Command Executor","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":"- `Data`: Holds the data of SysLib","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"### UI Component","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":"### Parser Component","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":"### Command Component","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"### Data Component","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":"## Implementation ","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":"This section provides details on how certain features are implemented. ","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":"### Find Resource Feature","lastModifiedDate":"2023-10-27"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":"The `find` command allows users to search for resources based on specified filters such as author (`/a`), ISBN (`/i`), ID (`/id`), and title (`/t`). The results will show all resources that match any of the given filters.","lastModifiedDate":"2023-10-27"},{"lineNumber":47,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":48,"author":{"gitId":"000verflow"},"content":"`find` has the following options:","lastModifiedDate":"2023-10-27"},{"lineNumber":49,"author":{"gitId":"000verflow"},"content":"- `find /id [ID]`","lastModifiedDate":"2023-10-27"},{"lineNumber":50,"author":{"gitId":"000verflow"},"content":"- `find /t [TITLE]`","lastModifiedDate":"2023-10-27"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":"- `find /a [AUTHOR]`","lastModifiedDate":"2023-10-27"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":"- `find /i [ISBN]`","lastModifiedDate":"2023-10-27"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"Multiple filters can also be combined:","lastModifiedDate":"2023-10-27"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":"- `find /t [TITLE] /a [AUTHOR]`","lastModifiedDate":"2023-10-27"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":"#### Implementation","lastModifiedDate":"2023-10-27"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":"Upon receiving the `find` command, the system will:","lastModifiedDate":"2023-10-27"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":"1. Parse the filters and their associated values.","lastModifiedDate":"2023-10-27"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":"2. Filter the resources based on the given filters.","lastModifiedDate":"2023-10-27"},{"lineNumber":64,"author":{"gitId":"000verflow"},"content":"3. Display the matching resources.","lastModifiedDate":"2023-10-27"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":"#### Example Usage Scenario","lastModifiedDate":"2023-10-27"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":"**Step 1.** The user inputs the command: `find /a \"F. Scott Fitzgerald\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":"**Step 2.** The `UI` component forwards the input to `SYSLIB`, which then sends it to the `PARSER`.","lastModifiedDate":"2023-10-27"},{"lineNumber":71,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":"**Step 3.** The `PARSER` processes the command, extracts the `author` filter, and retrieves all resources written by \"F. Scott Fitzgerald\".","lastModifiedDate":"2023-10-27"},{"lineNumber":73,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":74,"author":{"gitId":"000verflow"},"content":"**Step 4.** The matching resources are displayed to the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":75,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":"#### Sequence Diagram","lastModifiedDate":"2023-10-27"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":"A sequence diagram could be provided here to visually show how the `find` function works.","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":"(Note: You would include the actual sequence diagram image, similar to the diagrams shown for other features.)","lastModifiedDate":"2023-10-27"},{"lineNumber":80,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":"### Examples for Testing","lastModifiedDate":"2023-10-27"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":"1. **Find by Author**","lastModifiedDate":"2023-10-27"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":" - Test case: `find /a \"F. Scott Fitzgerald\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":" Expected: All resources written by F. Scott Fitzgerald are displayed.","lastModifiedDate":"2023-10-27"},{"lineNumber":87,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":88,"author":{"gitId":"000verflow"},"content":"2. **Find by ISBN**","lastModifiedDate":"2023-10-27"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":" - Test case: `find /i \"9780061120084\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":" Expected: The resource with ISBN \"9780061120084\" is displayed, which should be \"To Kill a Mockingbird\" by Harper Lee.","lastModifiedDate":"2023-10-27"},{"lineNumber":92,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":93,"author":{"gitId":"000verflow"},"content":"3. **Find by ID**","lastModifiedDate":"2023-10-27"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":" - Test case: `find /id 2`","lastModifiedDate":"2023-10-27"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":96,"author":{"gitId":"000verflow"},"content":" Expected: The resource with ID \"2\" is displayed, which should be \"To Kill a Mockingbird\" by Harper Lee.","lastModifiedDate":"2023-10-27"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":"4. **Find by Title**","lastModifiedDate":"2023-10-27"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":" - Test case: `find /t \"The Great Gatsby\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":" Expected: The resource titled \"The Great Gatsby\" is displayed.","lastModifiedDate":"2023-10-27"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":"5. **Combining Filters**","lastModifiedDate":"2023-10-27"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":" - Test case: `find /a \"F. Scott Fitzgerald\" /t \"The Great Gatsby\"`","lastModifiedDate":"2023-10-27"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":" Expected: Only the resource that matches both the title \"The Great Gatsby\" and the author \"F. Scott Fitzgerald\" is displayed.","lastModifiedDate":"2023-10-27"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":109,"author":{"gitId":"JoanneJo"},"content":"### Add Resource Feature","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"JoanneJo"},"content":"The `add` feature is responsible for processing user commands to add a new book to SysLib. It is facilitated by ","lastModifiedDate":"2023-10-26"},{"lineNumber":112,"author":{"gitId":"JoanneJo"},"content":"the `AddCommand` component. It works with `Parser` and `Command` components to parse and validate the user input. ","lastModifiedDate":"2023-10-26"},{"lineNumber":113,"author":{"gitId":"JoanneJo"},"content":"The new book is stored internally in `resourceList` as a `Book`. ","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"JoanneJo"},"content":"`add` has six options:","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"JoanneJo"},"content":"- add /id [id] /t [title] /a [author] /tag [tag] /i [isbn]","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"JoanneJo"},"content":"- add /id [id] /t [title] /a [author] /tag [tag] /i [isbn] _/g [genre]_","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"JoanneJo"},"content":"#### Implementation","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"JoanneJo"},"content":"It implements the following operations:","lastModifiedDate":"2023-10-26"},{"lineNumber":122,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"JoanneJo"},"content":"- `ADDCOMMAND#parseArgument(statement: String)` -- Parses the input command to extract relevant information.","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"JoanneJo"},"content":"- `ADDCOMMAND#validate(statement: String, values: String[])` -- Validates the input statement to ensure that it is valid.","lastModifiedDate":"2023-10-26"},{"lineNumber":125,"author":{"gitId":"JoanneJo"},"content":"- `ADDCOMMAND#createBook(values: String[])` -- Creates a new book based on the parsed and validated values.","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"JoanneJo"},"content":"#### Example Usage Scenario","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":129,"author":{"gitId":"JoanneJo"},"content":"Step 1. The user inputs the command: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":131,"author":{"gitId":"JoanneJo"},"content":"Step 2. The `UI` component forwards the input to `SYSLIB`, which in turn passes it to the `PARSER`.","lastModifiedDate":"2023-10-26"},{"lineNumber":132,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":133,"author":{"gitId":"JoanneJo"},"content":"Step 3. The `PARSER` processes the command and determines that it contains a valid key (`add`). It then calls ","lastModifiedDate":"2023-10-26"},{"lineNumber":134,"author":{"gitId":"JoanneJo"},"content":"`ADDCOMMAND#execute(statement: String, this: Parser)` with the input command.","lastModifiedDate":"2023-10-26"},{"lineNumber":135,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":136,"author":{"gitId":"JoanneJo"},"content":"Step 4. The `ADDCOMMMAND` component receives the command and performs the following operations:","lastModifiedDate":"2023-10-26"},{"lineNumber":137,"author":{"gitId":"JoanneJo"},"content":"- Calls `ADDCOMMAND#parseArgument(statement: String)` to extract values for ID, title, author, ISBN, tag, and genres.","lastModifiedDate":"2023-10-26"},{"lineNumber":138,"author":{"gitId":"JoanneJo"},"content":"- Calls `ADDCOMMAND#validate(statement: String, values: String[])` to ensure the validity of the input command.","lastModifiedDate":"2023-10-26"},{"lineNumber":139,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":140,"author":{"gitId":"JoanneJo"},"content":"Step 5. The `COMMAND` component processes the input command to ensure that it meets the required format and constraints.","lastModifiedDate":"2023-10-26"},{"lineNumber":141,"author":{"gitId":"JoanneJo"},"content":"It prepares the argument values for further processing.","lastModifiedDate":"2023-10-26"},{"lineNumber":142,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":143,"author":{"gitId":"JoanneJo"},"content":"Step 6. Since the `tag` argument in the input command indicates that it is a book, the `ADDCOMMAND` determines that the","lastModifiedDate":"2023-10-26"},{"lineNumber":144,"author":{"gitId":"JoanneJo"},"content":"key is equal to `b` (ignoring case). It then creates a new `Book` object using the parsed values (title, ISBN, author, ","lastModifiedDate":"2023-10-26"},{"lineNumber":145,"author":{"gitId":"JoanneJo"},"content":"genres, ID).","lastModifiedDate":"2023-10-26"},{"lineNumber":146,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":147,"author":{"gitId":"JoanneJo"},"content":"Step 7. The newly created book is forwarded to the `PARSER` to be added to the `resourceList`.","lastModifiedDate":"2023-10-26"},{"lineNumber":148,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":149,"author":{"gitId":"JoanneJo"},"content":"#### Sequence Diagram","lastModifiedDate":"2023-10-26"},{"lineNumber":150,"author":{"gitId":"JoanneJo"},"content":"The following sequence diagram shows how the add function works:","lastModifiedDate":"2023-10-26"},{"lineNumber":151,"author":{"gitId":"JoanneJo"},"content":"\u003cimg src\u003d\"images/AddSequenceDiagram.png\"/\u003e","lastModifiedDate":"2023-10-26"},{"lineNumber":152,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":153,"author":{"gitId":"yingx9"},"content":"### Listing Resources Feature","lastModifiedDate":"2023-10-25"},{"lineNumber":154,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":155,"author":{"gitId":"yingx9"},"content":"The `list` command works with the `Parser` and `Command` component to execute the correct action. ","lastModifiedDate":"2023-10-25"},{"lineNumber":156,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":157,"author":{"gitId":"yingx9"},"content":"`list` has four options:","lastModifiedDate":"2023-10-25"},{"lineNumber":158,"author":{"gitId":"yingx9"},"content":"- list","lastModifiedDate":"2023-10-25"},{"lineNumber":159,"author":{"gitId":"yingx9"},"content":"- list _/tag [tag]_","lastModifiedDate":"2023-10-25"},{"lineNumber":160,"author":{"gitId":"yingx9"},"content":"- list _/g [genre]_","lastModifiedDate":"2023-10-25"},{"lineNumber":161,"author":{"gitId":"yingx9"},"content":"- list _/tag [tag]_ _/g [genre]_","lastModifiedDate":"2023-10-25"},{"lineNumber":162,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":163,"author":{"gitId":"yingx9"},"content":"When `list` is specified with both `tag` and `genre` filters, it is `AND` inclusive, listing only ","lastModifiedDate":"2023-10-25"},{"lineNumber":164,"author":{"gitId":"yingx9"},"content":"Resources with the same tag and genre. ","lastModifiedDate":"2023-10-25"},{"lineNumber":165,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":166,"author":{"gitId":"yingx9"},"content":"Sequence Diagram:","lastModifiedDate":"2023-10-25"},{"lineNumber":167,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":168,"author":{"gitId":"yingx9"},"content":"\u003cimg src\u003d\"images/ListSequenceDiagram.png\" /\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":169,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":170,"author":{"gitId":"yingx9"},"content":"When a user enters `list /tag B`, the Parser retrieves the parameters from the input and","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"yingx9"},"content":"calls the `execute` function of ListCommand.","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"yingx9"},"content":"ListCommand then calls `parseArg` and `validate` from `Command`, which checks if the parameters are valid. If it passes","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"yingx9"},"content":"the checks, `filterResources` is called to begin the filtering process. First it calls `hasFilters()` check if the user ","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"yingx9"},"content":"selected any filters `[tag/genre/both]` or none. ","lastModifiedDate":"2023-10-26"},{"lineNumber":176,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"yingx9"},"content":"If hasFilters returns `true`, it filters the `resourceList` with the given keywords and display the details ","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"yingx9"},"content":"of the resources.","lastModifiedDate":"2023-10-26"},{"lineNumber":179,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":180,"author":{"gitId":"yingx9"},"content":"If hasFilters returns `false`, it skips the filtering process and displays the details of all the resources.","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":182,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":183,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":184,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":186,"author":{"gitId":"DavinciDelta"},"content":"All librarians, not just system librarian!","lastModifiedDate":"2023-10-24"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":188,"author":{"gitId":"JoanneJo"},"content":"- Needs to manage inventory with significant number of resources e.g. books","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"JoanneJo"},"content":"- Is a fast typist","lastModifiedDate":"2023-10-26"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":191,"author":{"gitId":"JoanneJo"},"content":"### Value Proposition","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":193,"author":{"gitId":"DavinciDelta"},"content":"To provide a platform to help librarians to quickly find the information they need to assist patrons.","lastModifiedDate":"2023-10-24"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":197,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":198,"author":{"gitId":"bnjm2000"},"content":"|---------|-----------|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|","lastModifiedDate":"2023-10-26"},{"lineNumber":199,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | view a list of books that the library has | have an overview of all the books |","lastModifiedDate":"2023-10-24"},{"lineNumber":200,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | add new books to our inventory by entering their title, author, ISBN, and publication year | keep our collection up-to-date |","lastModifiedDate":"2023-10-24"},{"lineNumber":201,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | delete books from the database | let the patrons know our library no longer carries it |","lastModifiedDate":"2023-10-24"},{"lineNumber":202,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | tag a book as physical medium like newspapers, audio cds, books or online like eJournals | patrons can know what type are available |","lastModifiedDate":"2023-10-24"},{"lineNumber":203,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | have a help function | know the commands of this programme |","lastModifiedDate":"2023-10-24"},{"lineNumber":204,"author":{"gitId":"DavinciDelta"},"content":"| v1.0 | librarian | quickly find out how many books we have of a particular author and the names of the books | know how many books are related to the author |","lastModifiedDate":"2023-10-24"},{"lineNumber":205,"author":{"gitId":"bnjm2000"},"content":"| v2.0 | librarian | import/export our library\u0027s inventory data to a file format | easily share with other libraries to be used for backup and archival purposes. |","lastModifiedDate":"2023-10-26"},{"lineNumber":206,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | find a to-do item by name | locate a to-do without having to go through the entire list |","lastModifiedDate":"2023-10-27"},{"lineNumber":207,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | get the status of an item | know if it is available |","lastModifiedDate":"2023-10-27"},{"lineNumber":208,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | update the details of a resource | fix any mistakes and maintain consistency |","lastModifiedDate":"2023-10-27"},{"lineNumber":209,"author":{"gitId":"000verflow"},"content":"| v2.0 | librarian | add in different types of resources | differentiate between resources such as magazines, cds... |","lastModifiedDate":"2023-10-27"},{"lineNumber":210,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":211,"author":{"gitId":"JoanneJo"},"content":"## Use Cases","lastModifiedDate":"2023-10-26"},{"lineNumber":212,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":213,"author":{"gitId":"JoanneJo"},"content":"(For all use cases below, the System is the SysLib and the Actor is the user, unless specified otherwise)","lastModifiedDate":"2023-10-26"},{"lineNumber":214,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":215,"author":{"gitId":"JoanneJo"},"content":"### Use case: Add a book","lastModifiedDate":"2023-10-26"},{"lineNumber":216,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":217,"author":{"gitId":"JoanneJo"},"content":"#### MSS","lastModifiedDate":"2023-10-26"},{"lineNumber":218,"author":{"gitId":"JoanneJo"},"content":"1. User requests to add a book","lastModifiedDate":"2023-10-26"},{"lineNumber":219,"author":{"gitId":"JoanneJo"},"content":"2. AddressBook adds the book","lastModifiedDate":"2023-10-26"},{"lineNumber":220,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":221,"author":{"gitId":"JoanneJo"},"content":" Use case ends.","lastModifiedDate":"2023-10-26"},{"lineNumber":222,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":223,"author":{"gitId":"JoanneJo"},"content":"#### Extensions","lastModifiedDate":"2023-10-26"},{"lineNumber":224,"author":{"gitId":"JoanneJo"},"content":"- 1a. The given ID is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":225,"author":{"gitId":"JoanneJo"},"content":" - 1a1. SysLib shows an error message.","lastModifiedDate":"2023-10-26"},{"lineNumber":226,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":227,"author":{"gitId":"JoanneJo"},"content":" Use case ends.","lastModifiedDate":"2023-10-26"},{"lineNumber":228,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":229,"author":{"gitId":"JoanneJo"},"content":"- 1b. Insufficient data given.","lastModifiedDate":"2023-10-26"},{"lineNumber":230,"author":{"gitId":"JoanneJo"},"content":" - 1b1. SysLib shows an error message.","lastModifiedDate":"2023-10-26"},{"lineNumber":231,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":232,"author":{"gitId":"JoanneJo"},"content":" Use case ends.","lastModifiedDate":"2023-10-26"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":234,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":236,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":238,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":239,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":240,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":242,"author":{"gitId":"JoanneJo"},"content":"## Instructions for Manual Testing","lastModifiedDate":"2023-10-26"},{"lineNumber":243,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":244,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":245,"author":{"gitId":"bnjm2000"},"content":"help","lastModifiedDate":"2023-10-26"},{"lineNumber":246,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":247,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":248,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":249,"author":{"gitId":"bnjm2000"},"content":"Commands available:","lastModifiedDate":"2023-10-26"},{"lineNumber":250,"author":{"gitId":"bnjm2000"},"content":"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE])","lastModifiedDate":"2023-10-26"},{"lineNumber":251,"author":{"gitId":"bnjm2000"},"content":"delete: deletes the resource with the specified ID from the library inventory. (e.g. delete /id 123456789)","lastModifiedDate":"2023-10-26"},{"lineNumber":252,"author":{"gitId":"bnjm2000"},"content":"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction","lastModifiedDate":"2023-10-26"},{"lineNumber":253,"author":{"gitId":"bnjm2000"},"content":"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)","lastModifiedDate":"2023-10-26"},{"lineNumber":254,"author":{"gitId":"bnjm2000"},"content":"exit: displays a farewell message and exits the program (e.g. exit)","lastModifiedDate":"2023-10-26"},{"lineNumber":255,"author":{"gitId":"bnjm2000"},"content":"For more information, please refer to our user guide at:https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html","lastModifiedDate":"2023-10-26"},{"lineNumber":256,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":257,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":258,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":259,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":260,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":261,"author":{"gitId":"bnjm2000"},"content":"add /id 1 /t The Great Gatsby /a F. Scott Fitzgerald /tag B /i 9780023381201 /g Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-26"},{"lineNumber":262,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":263,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":264,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":265,"author":{"gitId":"bnjm2000"},"content":"This book is added: The Great Gatsby","lastModifiedDate":"2023-10-26"},{"lineNumber":266,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":267,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":268,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":269,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":270,"author":{"gitId":"bnjm2000"},"content":"add /id 2 /t To Kill a Mockingbird /a Harper Lee /tag B /i 9780061120084 /g Novel, Bildungsroman, Southern Gothic, Domestic Fiction, Thriller, Legal Story","lastModifiedDate":"2023-10-26"},{"lineNumber":271,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":272,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":273,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":274,"author":{"gitId":"bnjm2000"},"content":"This book is added: To Kill a Mockingbird","lastModifiedDate":"2023-10-26"},{"lineNumber":275,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":276,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":277,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":278,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":279,"author":{"gitId":"bnjm2000"},"content":"list","lastModifiedDate":"2023-10-26"},{"lineNumber":280,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":281,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":282,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":283,"author":{"gitId":"bnjm2000"},"content":"Listing all resources in the Library:","lastModifiedDate":"2023-10-26"},{"lineNumber":284,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":285,"author":{"gitId":"bnjm2000"},"content":"1. [B] ID: 1 Title: The Great Gatsby ISBN: 9780023381201 Author: F. Scott Fitzgerald Genre: Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-26"},{"lineNumber":286,"author":{"gitId":"bnjm2000"},"content":"2. [B] ID: 2 Title: To Kill a Mockingbird ISBN: 9780061120084 Author: Harper Lee Genre: Novel, Bildungsroman, Southern Gothic,","lastModifiedDate":"2023-10-26"},{"lineNumber":287,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":288,"author":{"gitId":"bnjm2000"},"content":"There are currently 2 resource(s).","lastModifiedDate":"2023-10-26"},{"lineNumber":289,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":290,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":291,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":292,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":293,"author":{"gitId":"bnjm2000"},"content":"delete /id 1","lastModifiedDate":"2023-10-26"},{"lineNumber":294,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":295,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":296,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":297,"author":{"gitId":"bnjm2000"},"content":"Looking for ID: 1...","lastModifiedDate":"2023-10-26"},{"lineNumber":298,"author":{"gitId":"bnjm2000"},"content":"This resource is removed: ","lastModifiedDate":"2023-10-26"},{"lineNumber":299,"author":{"gitId":"bnjm2000"},"content":"[B] ID: 1 Title: The Great Gatsby ISBN: 9780023381201 Author: F. Scott Fitzgerald Genre: Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-26"},{"lineNumber":300,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":301,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":302,"author":{"gitId":"bnjm2000"},"content":"Example input:","lastModifiedDate":"2023-10-26"},{"lineNumber":303,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":304,"author":{"gitId":"bnjm2000"},"content":"exit","lastModifiedDate":"2023-10-26"},{"lineNumber":305,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":306,"author":{"gitId":"bnjm2000"},"content":"Example response:","lastModifiedDate":"2023-10-26"},{"lineNumber":307,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":308,"author":{"gitId":"bnjm2000"},"content":"Bye, hope to see you again soon!","lastModifiedDate":"2023-10-26"},{"lineNumber":309,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-26"},{"lineNumber":310,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-26"},{"lineNumber":311,"author":{"gitId":"JoanneJo"},"content":"### Launch and Shutdown","lastModifiedDate":"2023-10-26"},{"lineNumber":312,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":313,"author":{"gitId":"JoanneJo"},"content":"1. Initial launch","lastModifiedDate":"2023-10-26"},{"lineNumber":314,"author":{"gitId":"JoanneJo"},"content":" 1. Download the jar file and copy it into an empty folder.","lastModifiedDate":"2023-10-26"},{"lineNumber":315,"author":{"gitId":"JoanneJo"},"content":" 2. Open the command prompt and run `java -jar SysLib.jar`.","lastModifiedDate":"2023-10-26"},{"lineNumber":316,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":317,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":318,"author":{"gitId":"JoanneJo"},"content":"### Adding a Book","lastModifiedDate":"2023-10-26"},{"lineNumber":319,"author":{"gitId":"JoanneJo"},"content":"1. Add a book","lastModifiedDate":"2023-10-26"},{"lineNumber":320,"author":{"gitId":"JoanneJo"},"content":" 1. Test case: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B`","lastModifiedDate":"2023-10-26"},{"lineNumber":321,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":322,"author":{"gitId":"JoanneJo"},"content":" Expected: A book with ID: 0005, Title: Frankenstein, Author: Mary Shelley, and ISBN: FKS0001 is created and added ","lastModifiedDate":"2023-10-26"},{"lineNumber":323,"author":{"gitId":"JoanneJo"},"content":" into the list. A message is shown to acknowledge that the book has been added successfully.","lastModifiedDate":"2023-10-26"},{"lineNumber":324,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":325,"author":{"gitId":"JoanneJo"},"content":" 2. Test case: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":326,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":327,"author":{"gitId":"JoanneJo"},"content":" Expected: A book with ID: 0005, Title: Frankenstein, Author: Mary Shelley, ISBN: FKS0001, and ","lastModifiedDate":"2023-10-26"},{"lineNumber":328,"author":{"gitId":"JoanneJo"},"content":" Genres: Gothic, Fiction is created and added into the list. A message is shown to acknowledge that the book ","lastModifiedDate":"2023-10-26"},{"lineNumber":329,"author":{"gitId":"JoanneJo"},"content":" has been added successfully.","lastModifiedDate":"2023-10-26"},{"lineNumber":330,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":331,"author":{"gitId":"JoanneJo"},"content":" 3. Test case: `add /id abcd /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":332,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":333,"author":{"gitId":"JoanneJo"},"content":" Expected: No book is added. An error message is shown to indicate that the id is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":334,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":335,"author":{"gitId":"JoanneJo"},"content":" 4. Test case: `add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag A /g Gothic, Fiction`","lastModifiedDate":"2023-10-26"},{"lineNumber":336,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":337,"author":{"gitId":"JoanneJo"},"content":" Expected: No book is added. An error message is shown to indicate that the tag is invalid.","lastModifiedDate":"2023-10-26"},{"lineNumber":338,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":339,"author":{"gitId":"JoanneJo"},"content":" 5. Test case: `add /id 0005 /t Frankenstein`","lastModifiedDate":"2023-10-26"},{"lineNumber":340,"author":{"gitId":"JoanneJo"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":341,"author":{"gitId":"JoanneJo"},"content":" Expected: No book is added. An error message is shown to indicate that the input is incomplete.","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"000verflow":69,"bnjm2000":70,"JoanneJo":107,"DavinciDelta":8,"-":31,"yingx9":56}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"# Syslib","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"SysLib CLI is a robust command-line tool designed for system librarians to efficiently handle inventory, events, and patron assistance. With quick command-based actions, manage your library\u0027s resources and events seamlessly. Simplify administrative tasks, so you can focus on serving patrons better.","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"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":{"bnjm2000":3,"-":6}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"# Syslib User guide","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"SysLib is a program designed specially for system librarians to manage their work and responsibilities. Using intuitive commands, view, add, delete, and find books from the library inventory without any hassle. ","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"This user guide is for System Librarians to ensure optimal use of Syslib","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"## Contents","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"* [Quick start](#quick-start--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"000verflow"},"content":"* [Features](#features--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":8,"author":{"gitId":"000verflow"},"content":" * [Add a listing: `add`](#add-a-listing-add--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":" * [Delete a listing: `delete`](#delete-a-listing-delete--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":" * [List items: `list`](#list-all-items-list--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":" * [Find listing by search parameter: `find`](#find-specific-listings-find--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":" * [Exiting the program : `exit`](#exiting-the-program--exit--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" * [Get help: `help`](#viewing-help--help--return-to-contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":"* [FAQ](#faq--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":"* [Known Issues](#known-issues--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":16,"author":{"gitId":"000verflow"},"content":"* [Command summary](#command-summary--return-to-contents)","lastModifiedDate":"2023-10-06"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":"## Quick start | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":"1. Make sure that you have Java 11 or above installed on your computer.","lastModifiedDate":"2023-10-28"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" - Open terminal and type `java --version`","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" - [How do I check the version of my Java](https://www.java.com/en/download/help/version_manual.html)","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":"2. [Download the latest release](https://github.com/AY2324S1-CS2113T-W11-1/tp/releases/tag/v1.0) of `Syslib.jar`","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"3. Copy the `Syslib.jar` file into a folder on its own.","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":"4. Open a command terminal, type `cd \u003cFILE_DIRECTORY\u003e`, where \u003cFILE_DIRECTORY\u003e refers to the directory to the `Syslib.jar` file.","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":"5. Run the following command: `java -jar Syslib.jar`. You should see the following welcome screen.","lastModifiedDate":"2023-10-28"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" ____ _ _ _ ____ _ ___ ","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":"/ ___| _ _ ___| | (_) |__ / ___| | |_ _|","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":"\\___ \\| | | / __| | | | \u0027_ \\ | | | | | | ","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" ___) | |_| \\__ \\ |___| | |_) | | |___| |___ | | ","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"|____/ \\__, |___/_____|_|_.__/ \\____|_____|___|","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" |___/ ","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":"What would you like to do?","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":"## Features | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"000verflow"},"content":"\u003e Note:","lastModifiedDate":"2023-10-06"},{"lineNumber":43,"author":{"gitId":"000verflow"},"content":"\u003e - Items in square brackets `[]` are optional arguments.","lastModifiedDate":"2023-10-06"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":"\u003e - Items with `...` after them can be used multiple times","lastModifiedDate":"2023-10-06"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":" \u003e * e.g `[/g GENRE]` ... can be used as `/g Horror /g Fantasy`","lastModifiedDate":"2023-10-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"bnjm2000"},"content":"## Add a listing: `add` | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":"Adds a new resource to the library inventory.","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":"#### Types of tags:","lastModifiedDate":"2023-10-06"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":"`[B]` - Books","lastModifiedDate":"2023-10-06"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":"`[CD]` - CDs","lastModifiedDate":"2023-10-06"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"`[N]` - Newspapers","lastModifiedDate":"2023-10-06"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":"`[M]` - Magazines","lastModifiedDate":"2023-10-06"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":"\u003e Note:","lastModifiedDate":"2023-10-06"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":"\u003e - Anything with `e` prior is an electronic version ","lastModifiedDate":"2023-10-06"},{"lineNumber":59,"author":{"gitId":"bnjm2000"},"content":"\u003e\u003e i.e. `[eB]` is an eBook, `[eM]` is an eMagazine","lastModifiedDate":"2023-10-28"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"JoanneJo"},"content":"#### Notes about genre:","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"bnjm2000"},"content":"Multiple genres are allowed for a single resource. You can separate the different genres using comma followed by a space `, `.","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"JoanneJo"},"content":"Format: `add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]...`","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":66,"author":{"gitId":"bnjm2000"},"content":"**Example input:**","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":68,"author":{"gitId":"JoanneJo"},"content":"add /id 123456789 /t Moby Dick /a Herman Melville /tag B /i 9780763630188 /g Adventure, Fiction","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"JoanneJo"},"content":"add /id 123456789 /t Harry Squatter /a J.K. /tag M /i 9780763630187 /g History","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":71,"author":{"gitId":"bnjm2000"},"content":"**Example response:**","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"bnjm2000"},"content":"This book is added: Moby Dick","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":77,"author":{"gitId":"bnjm2000"},"content":"## Delete a listing: `delete` | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":79,"author":{"gitId":"bnjm2000"},"content":"Deletes the resource with the specified ID from the library inventory. You can find the ID using the `list` command.","lastModifiedDate":"2023-10-28"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":"Format: `delete /id ID`","lastModifiedDate":"2023-10-06"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":83,"author":{"gitId":"bnjm2000"},"content":"**Example input:**","lastModifiedDate":"2023-10-28"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":"delete /id 123456789","lastModifiedDate":"2023-10-06"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":87,"author":{"gitId":"bnjm2000"},"content":"**Example input:**","lastModifiedDate":"2023-10-28"},{"lineNumber":88,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":89,"author":{"gitId":"bnjm2000"},"content":"Looking for ID: 123456789...","lastModifiedDate":"2023-10-28"},{"lineNumber":90,"author":{"gitId":"bnjm2000"},"content":"This resource is removed: ","lastModifiedDate":"2023-10-28"},{"lineNumber":91,"author":{"gitId":"bnjm2000"},"content":"[B] ID: 123456789 Title: Moby Dick ISBN: 9780763630188 Author: Herman Melville Genre: Adventure, Fiction","lastModifiedDate":"2023-10-28"},{"lineNumber":92,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":93,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":95,"author":{"gitId":"bnjm2000"},"content":"## List all items: `list` | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"bnjm2000"},"content":"List all resources OR filter by certain tags or genre.","lastModifiedDate":"2023-10-28"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":98,"author":{"gitId":"yingx9"},"content":"Format: `list [/tag TAG /g GENRE ]`","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"yingx9"},"content":"- Including both filters `tag` and `genre` will only list resources satisfying both criteria:","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"yingx9"},"content":" - `list /tag B /g Horror` will list Books with Horror genre. ","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":102,"author":{"gitId":"bnjm2000"},"content":"**Example input:**","lastModifiedDate":"2023-10-28"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":"list","lastModifiedDate":"2023-10-06"},{"lineNumber":105,"author":{"gitId":"yingx9"},"content":"list /tag B","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"yingx9"},"content":"list /tag B /g Fiction","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"JoanneJo"},"content":"list /g Thrill","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":109,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":110,"author":{"gitId":"bnjm2000"},"content":"**Example output:**","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":112,"author":{"gitId":"bnjm2000"},"content":"Listing all resources in the Library:","lastModifiedDate":"2023-10-28"},{"lineNumber":113,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":114,"author":{"gitId":"bnjm2000"},"content":"1. [B] ID: 1 Title: Moby Dick ISBN: 9780763630188 Author: Herman Melville Genre: Adventure, Fiction","lastModifiedDate":"2023-10-28"},{"lineNumber":115,"author":{"gitId":"bnjm2000"},"content":"2. [M] ID: 2 Title: Harry Squatter ISBN: 9780763630187 Author: J.K. Genre: History","lastModifiedDate":"2023-10-28"},{"lineNumber":116,"author":{"gitId":"bnjm2000"},"content":"3. [B] ID: 3 Title: Frankenstein ISBN: FKS0001 Author: Mary Shelley Genre: -","lastModifiedDate":"2023-10-28"},{"lineNumber":117,"author":{"gitId":"bnjm2000"},"content":"4. [B] ID: 4 Title: The Great Gatsby ISBN: 9780023381201 Author: F. Scott Fitzgerald Genre: Novel, Fiction, Tragedy","lastModifiedDate":"2023-10-28"},{"lineNumber":118,"author":{"gitId":"bnjm2000"},"content":"5. [B] ID: 5 Title: To Kill a Mockingbird ISBN: 9780061120084 Author: Harper Lee Genre: Novel, Bildungsroman, Southern Gothic, Domestic Fiction, Thriller, Legal Story","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"bnjm2000"},"content":"There are currently 5 resource(s).","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"bnjm2000"},"content":"## Find specific listings: `find` | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"yingx9"},"content":"Find a resource by title, author, ISBN or given id.","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":127,"author":{"gitId":"JoanneJo"},"content":"Format: `find [/t TITLE OR /i ISBN OR /a AUTHOR OR /id ID]`","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":129,"author":{"gitId":"bnjm2000"},"content":"**Example input:**","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":131,"author":{"gitId":"JoanneJo"},"content":"find /t Moby Dick","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"JoanneJo"},"content":"find /i 9780763630188","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"000verflow"},"content":"find /a J. K. Rowling","lastModifiedDate":"2023-10-06"},{"lineNumber":134,"author":{"gitId":"000verflow"},"content":"find /id 123456789","lastModifiedDate":"2023-10-06"},{"lineNumber":135,"author":{"gitId":"000verflow"},"content":"```","lastModifiedDate":"2023-10-06"},{"lineNumber":136,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":137,"author":{"gitId":"bnjm2000"},"content":"**Example output:**","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"bnjm2000"},"content":"Here are resources that matched the given filters:","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"bnjm2000"},"content":"[B] ID: 123456789 Title: Moby Dick ISBN: 9780763630188 Author: Herman Melville Genre: Adventure, Fiction","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"bnjm2000"},"content":"## Exiting the program : `exit` | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"bnjm2000"},"content":"Displays a farewell message and exits the program.","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":147,"author":{"gitId":"000verflow"},"content":"Format: `exit`","lastModifiedDate":"2023-10-06"},{"lineNumber":148,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":149,"author":{"gitId":"bnjm2000"},"content":"**Example**","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"bnjm2000"},"content":"Bye, hope to see you again soon!","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"bnjm2000"},"content":"## Viewing help : `help` | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"bnjm2000"},"content":"Displays a list of available commands with examples and their syntax format.","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"bnjm2000"},"content":"Format: `help`","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"bnjm2000"},"content":"Example:","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"bnjm2000"},"content":"Commands available:","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"bnjm2000"},"content":"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE])","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"bnjm2000"},"content":"delete: deletes the resource with the specified ID from the library inventory. (e.g. delete /id 123456789)","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"bnjm2000"},"content":"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"bnjm2000"},"content":"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"bnjm2000"},"content":"exit: displays a farewell message and exits the program (e.g. exit)","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"bnjm2000"},"content":"For more information, please refer to our user guide at:https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"bnjm2000"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"bnjm2000"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":171,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":172,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":173,"author":{"gitId":"bnjm2000"},"content":"## FAQ | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":174,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":175,"author":{"gitId":"000verflow"},"content":"...","lastModifiedDate":"2023-10-06"},{"lineNumber":176,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":177,"author":{"gitId":"bnjm2000"},"content":"## Known Issues | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":178,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":179,"author":{"gitId":"000verflow"},"content":"...","lastModifiedDate":"2023-10-06"},{"lineNumber":180,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":181,"author":{"gitId":"bnjm2000"},"content":"## Command summary | [Return to contents](#contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":182,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":183,"author":{"gitId":"000verflow"},"content":"| Action | Command |","lastModifiedDate":"2023-10-06"},{"lineNumber":184,"author":{"gitId":"JoanneJo"},"content":"|-----------------------|------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"JoanneJo"},"content":"| Add listing | `add /t \u003ctitle of listing\u003e /a \u003cauthor of item\u003e /tag \u003ctype of item\u003e /i \u003cISBN of item\u003e [/g \u003cgenre of item\u003e]` |","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"000verflow"},"content":"| Delete listing | `delete /id \u003cid of listing\u003e` |","lastModifiedDate":"2023-10-06"},{"lineNumber":187,"author":{"gitId":"yingx9"},"content":"| Listing all items | `list [/tag \u003ctype of item\u003e /g \u003cgenre of book\u003e]` |","lastModifiedDate":"2023-10-16"},{"lineNumber":188,"author":{"gitId":"JoanneJo"},"content":"| Find specific listing | `find [/t \u003ctitle of listing\u003e OR /i \u003cISBN of item\u003e OR /a AUTHOR OR /id ID]` |","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"000verflow"},"content":"| Exit | `exit` |","lastModifiedDate":"2023-10-06"},{"lineNumber":190,"author":{"gitId":"000verflow"},"content":"| View help | `help` |","lastModifiedDate":"2023-10-06"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"000verflow":58,"bnjm2000":98,"JoanneJo":11,"-":16,"yingx9":8}},{"path":"docs/diagram/AddSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"JoanneJo"},"content":"@startuml","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"!include Style.puml","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":"participant \":SysLib\" as SYSLIB SYSLIB_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"participant \":UI\" as UI UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"actor User as USER USER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"participant \":Parser\" as PARSER PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"box Command","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"participant \":AddCommand\" as ADDCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"participant \":Command\" as COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":"end box","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":"SYSLIB -[SYSLIB_COLOR]\u003e UI : readCommand()","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"JoanneJo"},"content":"activate SYSLIB SYSLIB_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"JoanneJo"},"content":"activate UI UI_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"JoanneJo"},"content":"USER -[USER_COLOR]\u003e UI : \"add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\"","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"JoanneJo"},"content":"UI --[UI_COLOR]\u003e SYSLIB : input: String","lastModifiedDate":"2023-10-26"},{"lineNumber":22,"author":{"gitId":"JoanneJo"},"content":"deactivate UI","lastModifiedDate":"2023-10-26"},{"lineNumber":23,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":"SYSLIB -[SYSLIB_COLOR]\u003e PARSER : process(\"add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\")","lastModifiedDate":"2023-10-26"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":"activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":26,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":27,"author":{"gitId":"JoanneJo"},"content":"alt containsKey","lastModifiedDate":"2023-10-26"},{"lineNumber":28,"author":{"gitId":"JoanneJo"},"content":" PARSER-[PARSER_COLOR]\u003e PARSER: removeFirstWord(add /id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction)","lastModifiedDate":"2023-10-26"},{"lineNumber":29,"author":{"gitId":"JoanneJo"},"content":" activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"JoanneJo"},"content":" PARSER --[PARSER_COLOR]\u003e PARSER : \"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\": String","lastModifiedDate":"2023-10-26"},{"lineNumber":31,"author":{"gitId":"JoanneJo"},"content":" deactivate PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":33,"author":{"gitId":"JoanneJo"},"content":" PARSER -[PARSER_COLOR]\u003e ADDCOMMAND : execute(\"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\")","lastModifiedDate":"2023-10-26"},{"lineNumber":34,"author":{"gitId":"JoanneJo"},"content":" activate ADDCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":35,"author":{"gitId":"JoanneJo"},"content":"else noKey","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"JoanneJo"},"content":" PARSER --[PARSER_COLOR]\u003e SYSLIB","lastModifiedDate":"2023-10-26"},{"lineNumber":37,"author":{"gitId":"JoanneJo"},"content":"end","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"JoanneJo"},"content":"ADDCOMMAND -[COMMAND_COLOR]\u003e COMMAND : parseArgument(\"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\")","lastModifiedDate":"2023-10-26"},{"lineNumber":40,"author":{"gitId":"JoanneJo"},"content":"activate COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"JoanneJo"},"content":"COMMAND --[COMMAND_COLOR]\u003e ADDCOMMAND : values: String[]","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":"ADDCOMMAND -[COMMAND_COLOR]\u003e COMMAND : validate(\"/id 0005 /t Frankenstein /a Mary Shelley /i FKS0001 /tag B /g Gothic, Fiction\", values)","lastModifiedDate":"2023-10-26"},{"lineNumber":44,"author":{"gitId":"JoanneJo"},"content":"COMMAND --[COMMAND_COLOR]\u003e ADDCOMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"JoanneJo"},"content":"deactivate COMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"JoanneJo"},"content":"alt equalsIgnoreCase(\"b\")","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":" ADDCOMMAND -[COMMAND_COLOR]\u003e PARSER : createBook(values)","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"JoanneJo"},"content":" PARSER --[PARSER_COLOR]\u003e ADDCOMMAND : new Book (title, isbn, author, genres, id)","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"JoanneJo"},"content":" ADDCOMMAND --[COMMAND_COLOR]\u003e PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":"else notEqualsIgnoreCase(\"b\")","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"JoanneJo"},"content":" ADDCOMMAND --[COMMAND_COLOR]\u003e PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"JoanneJo"},"content":" deactivate ADDCOMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":54,"author":{"gitId":"JoanneJo"},"content":"end","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":"PARSER --[PARSER_COLOR]\u003e SYSLIB","lastModifiedDate":"2023-10-26"},{"lineNumber":57,"author":{"gitId":"JoanneJo"},"content":"deactivate PARSER","lastModifiedDate":"2023-10-26"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"JoanneJo"},"content":"@enduml","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"JoanneJo":59}},{"path":"docs/diagram/Architecture.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"@startuml","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/globe_internet\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/documents\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Users/user\u003e","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"!include style.puml","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"Package \" \"\u003c\u003cRectangle\u003e\u003e{","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":" Class UI UI_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":" Class Parser PARSER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":" Class Command COMMAND_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":" Class Data DATA_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":" Class Main #grey","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"Class \"\u003c$user\u003e\" as User STORAGE_COLOR_T2","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"UI -[#green]\u003e Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"Main -[#grey]-\u003e UI","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"Main -[#grey]-\u003e Parser","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"Parser -[#grey]-\u003e Command","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"Parser -[#blue]-\u003e Data","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"User ..\u003e UI","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"@enduml","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"yingx9":25}},{"path":"docs/diagram/ListSequenceDiagram.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"@startuml","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"!include Style.puml","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/globe_internet\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Concepts/documents\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"!include \u003coffice/Users/user\u003e","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"skinparam ArrowFontStyle plain","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"participant \":Main\" as MAIN #grey","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"participant \":UI\" as UI UI_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"Actor User as user USER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"participant \":Parser\" as PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"box Command","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"participant \":ListCommand\" as LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"participant \":Command\" as COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"end box","lastModifiedDate":"2023-10-25"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"MAIN -[#grey]\u003e UI : readcommand()","lastModifiedDate":"2023-10-25"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"activate MAIN #grey","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"activate UI UI_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":"user -[USER_COLOR]\u003e UI : \"list /tag B\"","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":"UI --[UI_COLOR]\u003e MAIN : \"list /tag B\"","lastModifiedDate":"2023-10-26"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"deactivate UI UI_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":"MAIN -[#grey]\u003e PARSER : process(\"list /tag B\")","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":"alt containsKey","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" PARSER -[PARSER_COLOR]\u003e PARSER: removeFirstWord(\"list /tag B\")","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" activate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" PARSER --[PARSER_COLOR]\u003e PARSER : \"/tag B\"","lastModifiedDate":"2023-10-26"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" deactivate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":" PARSER -[PARSER_COLOR]\u003e LISTCOMMAND: execute(\"/tag B\")","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":"else noKey","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" PARSER --[PARSER_COLOR]\u003e MAIN :","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":"end","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e COMMAND : parseArg(\"/tag B)","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":"activate COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"COMMAND --[COMMAND_COLOR]\u003e LISTCOMMAND : String[] values","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e COMMAND : validate(\"/tag B\", values)","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":"COMMAND --[COMMAND_COLOR]\u003e LISTCOMMAND :","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":"deactivate COMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e LISTCOMMAND : filterResources()","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":"activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e LISTCOMMAND : hasFilters()","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":"activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND --[COMMAND_COLOR]\u003e LISTCOMMAND","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND -[COMMAND_COLOR]\u003e LISTCOMMAND : displayResourcesDetails()","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":"activate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":"LISTCOMMAND --[COMMAND_COLOR]\u003e PARSER","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":"deactivate LISTCOMMAND COMMAND_COLOR","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":"PARSER --[PARSER_COLOR]\u003e MAIN :","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"deactivate PARSER PARSER_COLOR","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":"@enduml","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"yingx9":75}},{"path":"docs/diagram/Style.puml","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"/\u0027","lastModifiedDate":"2023-10-24"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":" \u0027Commonly used styles and colors across diagrams.","lastModifiedDate":"2023-10-24"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":" \u0027Refer to https://plantuml-documentation.readthedocs.io/en/latest for a more","lastModifiedDate":"2023-10-24"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":" \u0027comprehensive list of skinparams.","lastModifiedDate":"2023-10-24"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":" \u0027/","lastModifiedDate":"2023-10-24"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"\u0027T1 through T4 are shades of the original color from lightest to darkest","lastModifiedDate":"2023-10-24"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"!define SYSLIB_COLOR #grey","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR #1D8900","lastModifiedDate":"2023-10-24"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T1 #83E769","lastModifiedDate":"2023-10-24"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T2 #3FC71B","lastModifiedDate":"2023-10-24"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T3 #166800","lastModifiedDate":"2023-10-24"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"!define UI_COLOR_T4 #0E4100","lastModifiedDate":"2023-10-24"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR #3333C4","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T1 #C8C8FA","lastModifiedDate":"2023-10-24"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T2 #6A6ADC","lastModifiedDate":"2023-10-24"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T3 #1616B0","lastModifiedDate":"2023-10-24"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"!define PARSER_COLOR_T4 #101086","lastModifiedDate":"2023-10-24"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR #9D0012","lastModifiedDate":"2023-10-24"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T1 #F97181","lastModifiedDate":"2023-10-24"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T2 #E41F36","lastModifiedDate":"2023-10-24"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T3 #7B000E","lastModifiedDate":"2023-10-24"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":"!define STORAGE_COLOR_T4 #51000A","lastModifiedDate":"2023-10-24"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR #A38300","lastModifiedDate":"2023-10-24"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_COLOR_T1 #FFE374","lastModifiedDate":"2023-10-24"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_T2 #EDC520","lastModifiedDate":"2023-10-24"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_T3 #806600","lastModifiedDate":"2023-10-24"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":"!define COMMAND_COLOR_T2 #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":"!define DATA_COLOR #544400","lastModifiedDate":"2023-10-24"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":"!define USER_COLOR #000000","lastModifiedDate":"2023-10-24"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":"skinparam Package {","lastModifiedDate":"2023-10-24"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" BackgroundColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" FontSize 16","lastModifiedDate":"2023-10-24"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":"skinparam Class {","lastModifiedDate":"2023-10-24"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" FontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":" FontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" BorderThickness 1","lastModifiedDate":"2023-10-24"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":" BorderColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" StereotypeFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":"skinparam Actor {","lastModifiedDate":"2023-10-24"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" BorderColor USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" Color USER_COLOR","lastModifiedDate":"2023-10-24"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"skinparam Sequence {","lastModifiedDate":"2023-10-24"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" MessageAlign center","lastModifiedDate":"2023-10-24"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":" BoxFontSize 15","lastModifiedDate":"2023-10-24"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" BoxPadding 0","lastModifiedDate":"2023-10-24"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" BoxFontColor #FFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" FontName Arial","lastModifiedDate":"2023-10-24"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":"skinparam Participant {","lastModifiedDate":"2023-10-24"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":" FontColor #FFFFFFF","lastModifiedDate":"2023-10-24"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":" Padding 20","lastModifiedDate":"2023-10-24"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-24"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"skinparam ArrowFontStyle bold","lastModifiedDate":"2023-10-24"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":"skinparam MinClassWidth 50","lastModifiedDate":"2023-10-24"},{"lineNumber":76,"author":{"gitId":"yingx9"},"content":"skinparam ParticipantPadding 10","lastModifiedDate":"2023-10-24"},{"lineNumber":77,"author":{"gitId":"yingx9"},"content":"skinparam Shadowing false","lastModifiedDate":"2023-10-24"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":"skinparam DefaultTextAlignment center","lastModifiedDate":"2023-10-24"},{"lineNumber":79,"author":{"gitId":"yingx9"},"content":"skinparam packageStyle Rectangle","lastModifiedDate":"2023-10-24"},{"lineNumber":80,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-24"},{"lineNumber":81,"author":{"gitId":"yingx9"},"content":"hide footbox","lastModifiedDate":"2023-10-24"},{"lineNumber":82,"author":{"gitId":"yingx9"},"content":"hide members","lastModifiedDate":"2023-10-24"},{"lineNumber":83,"author":{"gitId":"yingx9"},"content":"hide circle","lastModifiedDate":"2023-10-24"}],"authorContributionMap":{"JoanneJo":2,"yingx9":81}},{"path":"docs/team/BenjaminNg.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"# Benjamin Ng - Project Portfolio Page","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"## Overview","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"bnjm2000":6}},{"path":"docs/team/JoanneAng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"JoanneJo"},"content":"# Joanne Ang - Project Portfolio Page","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"## Overview","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"JoanneJo":6}},{"path":"docs/team/WuXingyu.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"# Wu Xingyu - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"DavinciDelta":6}},{"path":"docs/team/YingXia.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"# Loke Ying Xia - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"yingx9":6}},{"path":"docs/team/ashokbalaji.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"# Ashok Balaji - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"000verflow":6}},{"path":"src/main/java/seedu/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"public class AddCommand extends Command{","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":" public AddCommand(){","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":" args \u003d new String[]{\"id\", \"t\", \"a\", \"tag\", \"i\", \"g\"};","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":" aliasArgs \u003d new String[]{\"id\", \"title\", \"author\", \"tag\", \"isbn\", \"genre\"};","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" required \u003d new boolean[]{true, true, true, true, true, false};","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":" public void execute(String statement, Parser parser) throws","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":" IllegalStateException, NumberFormatException, SysLibException {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":" String[] values \u003d parseArgument(statement);","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"JoanneJo"},"content":" validate(statement, values);","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"JoanneJo"},"content":" String title \u003d values[1];","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"JoanneJo"},"content":" String tag \u003d values[3];","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"JoanneJo"},"content":" if (tag.equalsIgnoreCase(\"b\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"JoanneJo"},"content":" parser.resourceList.add(Parser.createBook(values));","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"JoanneJo"},"content":" System.out.println(\"This book is added: \" + title);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":" throw new SysLibException(\"Please enter a valid tag.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":1,"bnjm2000":3,"JoanneJo":12,"DavinciDelta":13}},{"path":"src/main/java/seedu/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" protected String[] args;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" protected String[] aliasArgs;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" protected boolean[] required;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":" public abstract void execute(String statement, Parser parser) throws","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":" IllegalArgumentException, IllegalStateException, SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" /*","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" validate will include str","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" public void validate(String statement, String[] value) throws IllegalArgumentException{","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" statement \u003d statement.toLowerCase();","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" for(int pointer \u003d 0; pointer \u003c args.length; pointer ++) {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" if(value[pointer] !\u003d null){","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" String arg \u003d validateArg(statement, pointer);","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" statement \u003d statement.replaceAll(arg+ \"\\\\s*\" + Pattern.quote(value[pointer].toLowerCase()), \"\");","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" if (!statement.isBlank()){","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(\"Unknown variable/command: \" + statement);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"DavinciDelta"},"content":" public String validateArg(String statement, int pointer){","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" String arg \u003d \"/\" + args[pointer] + \" \";","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"DavinciDelta"},"content":" int firstindex \u003d statement.indexOf(arg);","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"DavinciDelta"},"content":" if (firstindex \u003d\u003d -1){","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"DavinciDelta"},"content":" arg \u003d \"/\" + aliasArgs[pointer] + \" \";","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DavinciDelta"},"content":" firstindex \u003d statement.indexOf(arg);","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"DavinciDelta"},"content":" } else if (!aliasArgs[pointer].equals(args[pointer])){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DavinciDelta"},"content":" if (statement.contains(\"/\" + aliasArgs[pointer] + \" \")){","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(\"Duplicate instances of\" + arg","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"DavinciDelta"},"content":" + \", \" + arg + \" and /\" + aliasArgs[pointer] + \" mean the same\");","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"DavinciDelta"},"content":" int secondIndex \u003d statement.indexOf(arg, firstindex + arg.length());","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"DavinciDelta"},"content":" if(secondIndex !\u003d -1){","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(\"Duplicate instances of \" + arg);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"DavinciDelta"},"content":" return arg;","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"DavinciDelta"},"content":" public String[] parseArgument(String statement) throws IllegalArgumentException, IllegalStateException {","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"DavinciDelta"},"content":" String[] orderedArgs \u003d new String[args.length];","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"DavinciDelta"},"content":" for(int pointer \u003d 0; pointer \u003c args.length; pointer ++) {","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"DavinciDelta"},"content":" orderedArgs[pointer] \u003d getMatch(statement, pointer);","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"DavinciDelta"},"content":" if(orderedArgs[pointer] \u003d\u003d null \u0026\u0026 required[pointer]){","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException(args[pointer] + \" is missing in the argument!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"DavinciDelta"},"content":" return orderedArgs;","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"DavinciDelta"},"content":" public String getMatch(String statement, int pointer){","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"DavinciDelta"},"content":" String key \u003d args[pointer];","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"DavinciDelta"},"content":" Pattern pattern \u003d Pattern.compile(\"/\" + key + \" (.+?)(?\u003d\\\\s?/|$)\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"DavinciDelta"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"DavinciDelta"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"DavinciDelta"},"content":" return matcher.group(1).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"DavinciDelta"},"content":" if (aliasArgs[pointer] !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"DavinciDelta"},"content":" pattern \u003d Pattern.compile(\"/\" + aliasArgs[pointer] + \" (.+?)(?\u003d\\\\s?/|$)\", Pattern.CASE_INSENSITIVE);","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"DavinciDelta"},"content":" matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"DavinciDelta"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"DavinciDelta"},"content":" return matcher.group(1).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"DavinciDelta"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"DavinciDelta"},"content":" public int parseInt(String value){","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yingx9"},"content":" try {","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"DavinciDelta"},"content":" int num \u003d Integer.parseInt(value);","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"DavinciDelta"},"content":" if (0 \u003c num){","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"yingx9"},"content":" return num;","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException (\"The argument for id is not a valid number!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"yingx9"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"DavinciDelta"},"content":" throw new IllegalArgumentException (\"The argument for id is not a number!\");","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":3,"JoanneJo":2,"DavinciDelta":73,"yingx9":13}},{"path":"src/main/java/seedu/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" public DeleteCommand(){","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" args \u003d new String[]{\"id\"};","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" required \u003d new boolean[]{true};","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" public void execute(String statement, Parser parser) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" int id \u003d parseInt(parseArgument(statement)[0]);","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" assert id \u003e 0;","lastModifiedDate":"2023-10-24"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" ArrayList\u003cResource\u003e toRemove \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" System.out.println(\"Looking for ID: \" + id + \"...\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" for (Resource r: parser.resourceList){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" Book b \u003d (Book) r;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" if (b.getId() \u003d\u003d id){","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":" System.out.println(\"This resource is removed: \");","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" System.out.println(b);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" toRemove.add(r);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" if(toRemove.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"No resources with id matching \" + id + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"DavinciDelta"},"content":" parser.resourceList.removeAll(toRemove);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":2,"bnjm2000":3,"JoanneJo":1,"DavinciDelta":25,"yingx9":7}},{"path":"src/main/java/seedu/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" static {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" // remove logs from showing in stdout","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" for (java.util.logging.Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" if (handler instanceof java.util.logging.ConsoleHandler) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" FileHandler fileHandler \u003d new FileHandler(\"logs/findCommandLogs.log\", true);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" fileHandler.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" LOGGER.addHandler(fileHandler);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" LOGGER.setLevel(Level.INFO);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" LOGGER.log(Level.SEVERE, \"Failed to set up log file handler\", e);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":" public void execute(String statement, Parser parser) throws IllegalArgumentException {","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":" assert statement !\u003d null : \"Statement to execute cannot be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" assert parser !\u003d null : \"Parser must not be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" LOGGER.log(Level.INFO, \"Executing ExitCommand...\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" ui.showExitMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"bnjm2000":42}},{"path":"src/main/java/seedu/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"000verflow"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":" private static final String INVALID_ARGUMENT_MESSAGE \u003d \"Please use the format \u0027find [/t TITLE OR \"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":" + \"/i ISBN OR /a AUTHOR OR /id ID]\u0027\\n\" + \"____________________________________________________________\";","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":" private static final String NO_RESOURCE_FOUND_MESSAGE \u003d \"There are no resources found matching the given filters.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" private static final String RESOURCE_FOUND_MESSAGE \u003d \"Here are resources that matched the given filters:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":" static {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":" // remove logs from showing in stdout","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"000verflow"},"content":" for (java.util.logging.Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"000verflow"},"content":" if (handler instanceof java.util.logging.ConsoleHandler) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":" FileHandler fileHandler \u003d new FileHandler(\"logs/findCommandLogs.log\", true);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":" fileHandler.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"000verflow"},"content":" LOGGER.addHandler(fileHandler);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"000verflow"},"content":" LOGGER.setLevel(Level.INFO);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"000verflow"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"000verflow"},"content":" LOGGER.log(Level.SEVERE, \"Failed to set up log file handler\", e);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"000verflow"},"content":" protected String title;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"000verflow"},"content":" protected String author;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"000verflow"},"content":" protected String isbn;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":" protected String id;","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":" protected UI ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"000verflow"},"content":" public FindCommand(){","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"000verflow"},"content":" args \u003d new String[]{\"id\", \"i\", \"a\", \"t\"};","lastModifiedDate":"2023-10-26"},{"lineNumber":49,"author":{"gitId":"000verflow"},"content":" aliasArgs \u003d new String[]{\"id\", \"isbn\", \"author\", \"title\"};","lastModifiedDate":"2023-10-26"},{"lineNumber":50,"author":{"gitId":"000verflow"},"content":" required \u003d new boolean[]{false, false, false, false};","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":" LOGGER.info(\"FindCommand instance created.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":" public void setTitle(String title){","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":" this.title \u003d title;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":" public String getTitle(){","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":" return this.title;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":" public void setAuthor(String author){","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"000verflow"},"content":" this.author \u003d author;","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":" public String getAuthor(){","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":" return this.author;","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"000verflow"},"content":" public void setISBN(String isbn){","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":" this.isbn \u003d isbn;","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"000verflow"},"content":" public String getISBN(){","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":" return this.isbn;","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":" public void setID(String id){","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"000verflow"},"content":" this.id \u003d id;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":" public String getID(){","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":" return this.id;","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"000verflow"},"content":" public void execute(String statement, Parser parser) throws IllegalArgumentException, SysLibException {","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":" assert statement !\u003d null \u0026\u0026 !statement.trim().isEmpty() : \"Statement to execute cannot be null or empty!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":" assert parser !\u003d null : \"Parser cannot be null!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":" String[] value \u003d parseArgument(statement);","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"000verflow"},"content":" validate(statement, value);","lastModifiedDate":"2023-10-26"},{"lineNumber":93,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":" if (value[3]\u003d\u003dnull \u0026\u0026 value[2]\u003d\u003dnull \u0026\u0026 value[1]\u003d\u003dnull \u0026\u0026 value[0]\u003d\u003dnull) {","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":" throw new IllegalArgumentException(INVALID_ARGUMENT_MESSAGE + System.lineSeparator());","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":" ArrayList\u003cResource\u003e matchedResources \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":" for (Resource r: parser.resourceList){","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":" Book b \u003d (Book) r;","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":" if (b.getTitle().equals(value[3]) || b.getISBN().equals(value[1]) || b.getAuthor().equals(value[2])){","lastModifiedDate":"2023-10-26"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":" matchedResources.add(b);","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":" if (matchedResources.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":" LOGGER.warning(\"No resources matched the given filters.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":" System.out.println(NO_RESOURCE_FOUND_MESSAGE);","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"000verflow"},"content":" ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"000verflow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"000verflow"},"content":" LOGGER.info(\"Resources matched the given filters.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"000verflow"},"content":" System.out.println(RESOURCE_FOUND_MESSAGE);","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"000verflow"},"content":" for (Resource r : matchedResources) {","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"000verflow"},"content":" System.out.println(r);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"000verflow"},"content":" ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":113,"yingx9":7}},{"path":"src/main/java/seedu/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" private static final Logger logger \u003d Logger.getLogger(HelpCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(FindCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" static {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" // remove logs from showing in stdout","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" for (java.util.logging.Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" if (handler instanceof java.util.logging.ConsoleHandler) {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" FileHandler fileHandler \u003d new FileHandler(\"logs/findCommandLogs.log\", true);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" fileHandler.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" LOGGER.addHandler(fileHandler);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" LOGGER.setLevel(Level.INFO);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" LOGGER.log(Level.SEVERE, \"Failed to set up log file handler\", e);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" public void execute(String statement, Parser parser) throws IllegalArgumentException {","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" assert statement !\u003d null : \"Statement to execute cannot be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" assert parser !\u003d null : \"Parser must not be null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" UI ui \u003d new UI();","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" logger.log(Level.INFO, \"Executing HelpCommand\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":" ui.showHelpMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":2,"bnjm2000":35,"yingx9":7}},{"path":"src/main/java/seedu/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"import static seedu.common.Messages.formatLineSeparator;","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"import static seedu.common.Messages.formatLastLineDivider;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"import static seedu.common.Messages.formatFirstLine;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":" public static final String FILTER_MESSAGE \u003d formatFirstLine(\"Listing resources matching given filters: \");","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":" public static final String GENERIC_MESSAGE \u003d formatFirstLine(\"Listing all resources in the Library:\");","lastModifiedDate":"2023-10-26"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":" public static final String ZERO_RESOURCES_MESSAGE \u003d formatLastLineDivider(\"There are currently 0 resources.\");","lastModifiedDate":"2023-10-26"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":" private static String tagKeyword;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":" private static String genreKeyword;","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":" private static String feedbackToUser;","lastModifiedDate":"2023-10-26"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":" public ListCommand(){","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":" args \u003d new String[]{\"tag\", \"g\"};","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":" aliasArgs \u003d new String[]{\"tag\", \"genre\"};","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":" required \u003d new boolean[]{false, false};","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" public void execute(String statement, Parser parser) throws SysLibException, IllegalArgumentException {","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" feedbackToUser \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" String[] values \u003d parseArgument(statement);","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" validate(statement, values);","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" filterResources(values, parser.resourceList);","lastModifiedDate":"2023-10-26"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" System.out.println(feedbackToUser);","lastModifiedDate":"2023-10-26"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" public void filterResources(String[] values, List\u003cResource\u003e resourceList) throws SysLibException{","lastModifiedDate":"2023-10-26"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" boolean hasFilters \u003d hasFilters((values));","lastModifiedDate":"2023-10-26"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" List\u003cResource\u003e matchedResources \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" if(hasFilters){","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" boolean isTagEqualToKeyword \u003d true;","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" boolean isGenreEqualToKeyword \u003d true;","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":" for (int i\u003d0; i \u003cresourceList.size(); i++){","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" Resource resource \u003d resourceList.get(i);","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":" if(tagKeyword !\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":" String resourceTag \u003d resource.getTag();","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":" isTagEqualToKeyword \u003d resourceTag.equals(tagKeyword);","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" if(genreKeyword !\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" isGenreEqualToKeyword \u003d Resource.hasGenre(resource, genreKeyword);","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":" if (isTagEqualToKeyword \u0026\u0026 isGenreEqualToKeyword){","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":" matchedResources.add(resource);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":" feedbackToUser +\u003d FILTER_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":" displayResourcesDetails(matchedResources);","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"yingx9"},"content":" } else{","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":" feedbackToUser +\u003d GENERIC_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"yingx9"},"content":" displayResourcesDetails(resourceList);","lastModifiedDate":"2023-10-26"},{"lineNumber":81,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":84,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"yingx9"},"content":" public String displayResourcesDetails(List\u003cResource\u003e resourcesList) {","lastModifiedDate":"2023-10-26"},{"lineNumber":90,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"yingx9"},"content":" String messageToDisplay \u003d \"\";","lastModifiedDate":"2023-10-26"},{"lineNumber":92,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"yingx9"},"content":" if (resourcesList.isEmpty()){","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"yingx9"},"content":" messageToDisplay +\u003d ZERO_RESOURCES_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":95,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":96,"author":{"gitId":"yingx9"},"content":" } else {","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"yingx9"},"content":" for (int i \u003d 0; i \u003c resourcesList.size(); i +\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"yingx9"},"content":" String resourceDetails \u003d resourcesList.get(i).toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"yingx9"},"content":" messageToDisplay +\u003d formatLineSeparator(i+1 + \". \" + resourceDetails);","lastModifiedDate":"2023-10-26"},{"lineNumber":101,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":103,"author":{"gitId":"yingx9"},"content":" messageToDisplay +\u003d formatLastLineDivider(\"There are currently \" + resourcesList.size() +","lastModifiedDate":"2023-10-26"},{"lineNumber":104,"author":{"gitId":"yingx9"},"content":" \" resource(s).\");","lastModifiedDate":"2023-10-26"},{"lineNumber":105,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":106,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":107,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"yingx9"},"content":" feedbackToUser +\u003d messageToDisplay;","lastModifiedDate":"2023-10-26"},{"lineNumber":109,"author":{"gitId":"yingx9"},"content":" return messageToDisplay;","lastModifiedDate":"2023-10-26"},{"lineNumber":110,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":111,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":112,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":113,"author":{"gitId":"yingx9"},"content":" public static boolean hasFilters(String[] values) throws SysLibException {","lastModifiedDate":"2023-10-26"},{"lineNumber":114,"author":{"gitId":"yingx9"},"content":" tagKeyword \u003d null;","lastModifiedDate":"2023-10-26"},{"lineNumber":115,"author":{"gitId":"yingx9"},"content":" genreKeyword \u003d null;","lastModifiedDate":"2023-10-26"},{"lineNumber":116,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":117,"author":{"gitId":"yingx9"},"content":" boolean hasFilters \u003d true;","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"yingx9"},"content":" if (values[0] \u003d\u003d null \u0026\u0026 values[1] \u003d\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":119,"author":{"gitId":"yingx9"},"content":" return false;","lastModifiedDate":"2023-10-26"},{"lineNumber":120,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":121,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":122,"author":{"gitId":"yingx9"},"content":" if (values[0] !\u003d null) {","lastModifiedDate":"2023-10-26"},{"lineNumber":123,"author":{"gitId":"yingx9"},"content":" tagKeyword \u003d values[0];","lastModifiedDate":"2023-10-26"},{"lineNumber":124,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":126,"author":{"gitId":"yingx9"},"content":" if (values[1] !\u003d null){","lastModifiedDate":"2023-10-26"},{"lineNumber":127,"author":{"gitId":"yingx9"},"content":" genreKeyword \u003d values[1];","lastModifiedDate":"2023-10-26"},{"lineNumber":128,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":129,"author":{"gitId":"yingx9"},"content":" return hasFilters;","lastModifiedDate":"2023-10-26"},{"lineNumber":130,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":131,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":132,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":133,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":2,"bnjm2000":1,"yingx9":130}},{"path":"src/main/java/seedu/common/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"package seedu.common;","lastModifiedDate":"2023-10-26"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.SEPARATOR_LINEDIVIDER;","lastModifiedDate":"2023-10-26"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"public class Messages {","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":" public static String formatFirstLine(String message){","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":" return LINESEPARATOR + message + LINESEPARATOR + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":" public static String formatLineSeparator(String message){","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":" return message + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":" public static String formatLastLineDivider(String message){","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":" return LINESEPARATOR + message + SEPARATOR_LINEDIVIDER;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-26"}],"authorContributionMap":{"yingx9":17}},{"path":"src/main/java/seedu/data/Book.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"public class Book extends Resource {","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":" private String author;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":" //private String synopsis;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":" private String[] genres;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":" private int id;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":" public Book(String title, String isbn, String author, String[] genres, int id) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" super(title, isbn);","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" setTag(\"B\");","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" setAuthor(author);","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":" //setSynopsis(synopsis);","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":" setGenre(genres);","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":" setId(id);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" public String getAuthor() {","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" return author;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" public void setAuthor(String author) {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" this.author \u003d author;","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":" /*public String getSynopsis() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" return synopsis;","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" public void setSynopsis(String synopsis) {","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" this.synopsis \u003d synopsis;","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"JoanneJo"},"content":" }*/","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"JoanneJo"},"content":" public String[] getGenre() {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"JoanneJo"},"content":" return genres;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"JoanneJo"},"content":" public void setGenre(String[] genres) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"JoanneJo"},"content":" this.genres \u003d genres;","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"JoanneJo"},"content":" public String getGenreString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":" return String.join(\", \", genres);","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"JoanneJo"},"content":" public int getId() {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"JoanneJo"},"content":" return id;","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"JoanneJo"},"content":" public void setId(int id) {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"JoanneJo"},"content":" this.id \u003d id;","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":" StringBuilder genreString \u003d new StringBuilder();","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":" if (getGenre()[0] \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"JoanneJo"},"content":" genreString.append(\"-\");","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"JoanneJo"},"content":" genreString.append(java.util.Arrays.toString(getGenre()).replace(\"[\", \"\").replace(\"]\", \"\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"JoanneJo"},"content":" return \"[\" + getTag() + \"] \" + \" ID: \" + getId() + \" Title: \" + getTitle() + \" ISBN: \" + getISBN() + \" Author: \"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"bnjm2000"},"content":" + getAuthor() + \" Genre: \" + genreString;","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":1,"bnjm2000":1,"JoanneJo":37,"DavinciDelta":23,"yingx9":4}},{"path":"src/main/java/seedu/data/Resource.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"public class Resource {","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":" private String title;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":" private boolean isBorrowed;","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":" private Integer copies;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":" private String tag;","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":" private String isbn;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" public Resource(String title, String isbn){","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" setTitle(title);","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" setBorrowed(false);","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" setISBN(isbn);","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" setCopies(1);","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":" setTag(\"\");","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" public String getTitle() {","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" return title;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" public void setTitle(String title) {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" this.title \u003d title;","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" public boolean isBorrowed() {","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" return isBorrowed;","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" public void setBorrowed(boolean borrowed) {","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":" isBorrowed \u003d borrowed;","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"DavinciDelta"},"content":" public Integer getCopies() {","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"DavinciDelta"},"content":" return copies;","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"DavinciDelta"},"content":" public void setCopies(Integer copies) {","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DavinciDelta"},"content":" this.copies \u003d copies;","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"DavinciDelta"},"content":" public String getTag() {","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"DavinciDelta"},"content":" return tag;","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"DavinciDelta"},"content":" public void setTag(String tag) {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"DavinciDelta"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"DavinciDelta"},"content":" public String getISBN() {","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"DavinciDelta"},"content":" return isbn;","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"DavinciDelta"},"content":" public void setISBN(String isbn) {","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"DavinciDelta"},"content":" this.isbn \u003d isbn;","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" return \"[\" + tag + \"] \" + title;","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":" public static boolean hasGenre(Resource resource, String genre){","lastModifiedDate":"2023-10-26"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":" Book bookResource;","lastModifiedDate":"2023-10-26"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" if (resource instanceof Book) {","lastModifiedDate":"2023-10-26"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":" bookResource \u003d (Book) resource;","lastModifiedDate":"2023-10-26"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" String[] genres \u003d bookResource.getGenre();","lastModifiedDate":"2023-10-26"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" if (genres[0] \u003d\u003d null ){","lastModifiedDate":"2023-10-26"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" return false;","lastModifiedDate":"2023-10-26"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":" for(int j \u003d0; j \u003c genres.length; j ++){","lastModifiedDate":"2023-10-26"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":" if (genres[j].equals(genre)){","lastModifiedDate":"2023-10-26"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":" return true;","lastModifiedDate":"2023-10-26"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":73,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":75,"author":{"gitId":"yingx9"},"content":" return false;","lastModifiedDate":"2023-10-26"},{"lineNumber":76,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":77,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":1,"DavinciDelta":53,"yingx9":25}},{"path":"src/main/java/seedu/data/SysLibException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"public class SysLibException extends Exception {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":" public SysLibException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"000verflow":1,"JoanneJo":6}},{"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":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.ui.UI;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Main entry-point for the java.duke.Duke application.","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":" private static UI ui;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":" private static Parser parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":" public Duke(){","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":" new Duke().run();","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":" public void run(){","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":" ui.showWelcomeMessage();","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" while (true) {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" String response \u003d ui.readCommand();","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" parser.process(response);","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" if (response.equalsIgnoreCase(\"exit\")){","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":" break;","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"000verflow":19,"bnjm2000":2,"-":11,"yingx9":2}},{"path":"src/main/java/seedu/parser/DeleteParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"public class DeleteParser {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":" public static String parseDelete(String statement) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":" String inputPattern \u003d \"/id (\\\\d+)\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":" Pattern pattern \u003d Pattern.compile(inputPattern);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" boolean matchFound \u003d matcher.find();","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DavinciDelta"},"content":" if (matchFound){","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":" return matcher.group(1).trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" \"\u0027delete /id ID\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":" } catch (IllegalStateException | SysLibException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":" \"\u0027delete /id ID\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DavinciDelta":26}},{"path":"src/main/java/seedu/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.AddCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.DeleteCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.FindCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.ListCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.HelpCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":"import seedu.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.SEPARATOR_LINEDIVIDER;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"import java.util.List;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"public class Parser {","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":" public List\u003cResource\u003e resourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":" public HashMap\u003cString, Command\u003e commandProcessor \u003d new HashMap\u003c\u003e() {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":" {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":" put(\"list\", new ListCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" put(\"delete\", new DeleteCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":" put(\"find\", new FindCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" put(\"help\", new HelpCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" put(\"exit\", new ExitCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DavinciDelta"},"content":" put(\"add\", new AddCommand());","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" };","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" public void process(String response) {","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" String command \u003d response.split(\" \")[0];","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" if (commandProcessor.containsKey(command)) {","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":" String statement \u003d removeFirstWord(response);","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" try {","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" commandProcessor.get(command).execute(statement, this);","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":" } catch (IllegalArgumentException | IllegalStateException | SysLibException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":" } else {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":" System.out.println(\"no commands found. Enter \\\"help\\\" for a list of commands.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":" public static String removeFirstWord(String response) {","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" int index \u003d response.indexOf(\" \");","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" return \"\";","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":" return response.substring(index + 1);","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":" public List\u003cResource\u003e getResourceList() {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"JoanneJo"},"content":" return resourceList;","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"JoanneJo"},"content":" public static String[] parseAddCommand(String statement) throws SysLibException {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"JoanneJo"},"content":" String inputPattern \u003d \"(.+?) /tag (.)(.+)\";","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"JoanneJo"},"content":" Pattern pattern \u003d Pattern.compile(inputPattern);","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"JoanneJo"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"JoanneJo"},"content":" boolean matchFound \u003d matcher.find();","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"JoanneJo"},"content":" if (matchFound) {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"JoanneJo"},"content":" if (matcher.group(2).equalsIgnoreCase(\"b\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"JoanneJo"},"content":" return parseAddBook(statement);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"JoanneJo"},"content":" public static String[] parseAddBook(String statement) throws SysLibException, IllegalStateException {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"JoanneJo"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"JoanneJo"},"content":" String inputPattern \u003d \"/id (.+?) /t (.+?) /a (.+?) /tag (.+?) /i (.+)\";","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"JoanneJo"},"content":" String genrePattern \u003d \"(.+) /g (.+)\";","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"JoanneJo"},"content":" Pattern pattern \u003d Pattern.compile(inputPattern);","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"JoanneJo"},"content":" Matcher matcher \u003d pattern.matcher(statement);","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"JoanneJo"},"content":" boolean matchFound \u003d matcher.find();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"JoanneJo"},"content":" Pattern gPattern \u003d Pattern.compile(genrePattern);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"JoanneJo"},"content":" Matcher gMatcher \u003d gPattern.matcher(matcher.group(5));","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"JoanneJo"},"content":" boolean gMatchFound \u003d gMatcher.find();","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"JoanneJo"},"content":" String[] args \u003d new String[6];","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"JoanneJo"},"content":" if (matchFound) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"JoanneJo"},"content":" args[0] \u003d matcher.group(1).trim(); // id","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"JoanneJo"},"content":" args[1] \u003d matcher.group(2).trim(); // title","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"JoanneJo"},"content":" args[2] \u003d matcher.group(3).trim(); // author","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"JoanneJo"},"content":" args[3] \u003d matcher.group(4).trim(); // tag","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"JoanneJo"},"content":" if (gMatchFound) {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"JoanneJo"},"content":" args[4] \u003d gMatcher.group(1).trim(); // isbn","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"JoanneJo"},"content":" args[5] \u003d gMatcher.group(2).trim(); // genre","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"JoanneJo"},"content":" args[4] \u003d matcher.group(5).trim(); // isbn","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"JoanneJo"},"content":" if (args[0].isEmpty() || args[1].isEmpty() || args[2].isEmpty() || args[3].isEmpty()","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"JoanneJo"},"content":" || args[4].isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"bnjm2000"},"content":" throw new SysLibException(\"Please state the id, title, author, tag, and ISBN.\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"yingx9"},"content":" SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":113,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"JoanneJo"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":117,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"JoanneJo"},"content":" return args;","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"JoanneJo"},"content":" } catch (IllegalStateException | SysLibException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"JoanneJo"},"content":" throw new SysLibException(\"Please use the format \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"yingx9"},"content":" \"\u0027add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE]\u0027.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":122,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"JoanneJo"},"content":" public static Book createBook(String[] args) throws IllegalStateException, NumberFormatException {","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"JoanneJo"},"content":" int id;","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"JoanneJo"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"JoanneJo"},"content":" id \u003d Integer.parseInt(args[0]); // id","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"JoanneJo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"yingx9"},"content":" throw new NumberFormatException(\"Please enter a valid id.\" + SEPARATOR_LINEDIVIDER);","lastModifiedDate":"2023-10-19"},{"lineNumber":131,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"JoanneJo"},"content":" String title \u003d args[1]; // title","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"JoanneJo"},"content":" String author \u003d args[2]; // author","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"JoanneJo"},"content":" String isbn \u003d args[4]; // isbn","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"JoanneJo"},"content":" String genre;","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"JoanneJo"},"content":" String[] genres \u003d new String[1];","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"JoanneJo"},"content":" if (args[5] !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"JoanneJo"},"content":" genre \u003d args[5]; // genre","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"JoanneJo"},"content":" genres \u003d genre.split(\", \");","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"JoanneJo"},"content":" return new Book(title, isbn, author, genres, id);","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"000verflow"},"content":" public Matcher parseFindCommand(String command) throws SysLibException{","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"000verflow"},"content":" // Define a regular expression pattern to match optional flags and their values","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"000verflow"},"content":" Pattern pattern \u003d Pattern.compile(\"/(t|a|i|id)\\\\s+([^/]+)\");","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"000verflow"},"content":" return pattern.matcher(command);","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":12,"bnjm2000":2,"JoanneJo":93,"DavinciDelta":1,"yingx9":47}},{"path":"src/main/java/seedu/ui/UI.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.ui;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"public class UI {","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":" public static final String LINESEPARATOR \u003d System.lineSeparator();","lastModifiedDate":"2023-10-26"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":" public static final String LINEDIVIDER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":" public static final String SEPARATOR_LINEDIVIDER \u003d LINESEPARATOR + LINEDIVIDER;","lastModifiedDate":"2023-10-26"},{"lineNumber":8,"author":{"gitId":"000verflow"},"content":" protected static String logo \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":" \" ____ _ _ _ ____ _ ___ \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":" \"/ ___| _ _ ___| | (_) |__ / ___| | |_ _|\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":" \"\\\\___ \\\\| | | / __| | | | \u0027_ \\\\ | | | | | | \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":" \" ___) | |_| \\\\__ \\\\ |___| | |_) | | |___| |___ | | \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":" \"|____/ \\\\__, |___/_____|_|_.__/ \\\\____|_____|___|\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":" \" |___/ \";","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":" protected Scanner myScanner;","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" public UI(){","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":" this.myScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":" public void showWelcomeMessage(){","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" System.out.println(logo);","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"What would you like to do?\");","lastModifiedDate":"2023-10-28"},{"lineNumber":28,"author":{"gitId":"000verflow"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"000verflow"},"content":" public void showExitMessage(){","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"Bye, hope to see you again soon!\");","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":" public void showHelpMessage(){","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"Commands available:\");","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"add: adds a new resource to the library inventory.\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN [/g GENRE])\");","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"delete: deletes the resource with the specified ID from the library inventory. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. delete /id 123456789)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"list: list all resources OR filter by certain tags or genre.\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" \"(e.g. list /tag B /g Fiction\");","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"exit: displays a farewell message and exits the program (e.g. exit)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"bnjm2000"},"content":" System.out.println(\"For more information, please refer to our user guide at:\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"bnjm2000"},"content":" \"https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html\");","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"bnjm2000"},"content":" showLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":" public void showError(Exception e){","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":" System.out.println(e);","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":" public String readCommand(){","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":" System.out.print(\"\u003e \");","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":" return myScanner.nextLine();","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":" public void showLine(){","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":" System.out.println(LINEDIVIDER);","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"000verflow":40,"bnjm2000":16,"yingx9":7}},{"path":"src/test/java/seedu/DukeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu;","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":"-"},"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":{"000verflow":1,"-":11}},{"path":"src/test/java/seedu/commands/AddCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"JoanneJo"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"JoanneJo"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"JoanneJo"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"JoanneJo"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"JoanneJo"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"JoanneJo"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"JoanneJo"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"JoanneJo"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"JoanneJo"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"JoanneJo"},"content":"public class AddCommandTest {","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"JoanneJo"},"content":" private final Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"JoanneJo"},"content":" private final AddCommand addCommand \u003d new AddCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"JoanneJo"},"content":" public void addCommandValidData() throws SysLibException {","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"JoanneJo"},"content":" addCommand.execute(\"/id 123456789 /t The Minds of Billy Milligan /a Daniel Keyes /tag B /i 987654321 \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"JoanneJo"},"content":" \"/g Non-Fiction, Biography\", parser);","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"JoanneJo"},"content":" Book newBook \u003d (Book) parser.getResourceList().get(0);","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getId(), 123456789);","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getTitle(), \"The Minds of Billy Milligan\");","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getAuthor(), \"Daniel Keyes\");","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getTag(), \"B\");","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getISBN(), \"987654321\");","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"JoanneJo"},"content":" assertEquals(newBook.getGenreString(), \"Non-Fiction, Biography\");","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"JoanneJo"},"content":" public void addCommandOutput() throws SysLibException {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"JoanneJo"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"JoanneJo"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"JoanneJo"},"content":" addCommand.execute(\"/id 123456789 /t The Minds of Billy Milligan /a Daniel Keyes /tag B /i 987654321 \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"JoanneJo"},"content":" \"/g Non-Fiction, Biography\", parser);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"JoanneJo"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"JoanneJo"},"content":" String expectedOutput \u003d \"This book is added: The Minds of Billy Milligan\" + System.lineSeparator() +","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"JoanneJo"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"JoanneJo"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"JoanneJo"},"content":" public void addCommandInvalidId() {","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"JoanneJo"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003eaddCommand.execute(\"/id abcd \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"JoanneJo"},"content":" \"/t The Minds of Billy Milligan /a Daniel Keyes /tag B /i 987654321\", parser));","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"JoanneJo"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"JoanneJo"},"content":" @Test","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"JoanneJo"},"content":" public void addCommandInsufficientData() {","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"JoanneJo"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003eaddCommand.execute(\"/id \", parser));","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"JoanneJo"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"JoanneJo"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"JoanneJo":58}},{"path":"src/test/java/seedu/commands/DeleteCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DavinciDelta"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DavinciDelta"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DavinciDelta"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DavinciDelta"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DavinciDelta"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DavinciDelta"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DavinciDelta"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DavinciDelta"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DavinciDelta"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DavinciDelta"},"content":" void execute() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DavinciDelta"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DavinciDelta"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DavinciDelta"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DavinciDelta"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DavinciDelta"},"content":" deleteCommand.execute(\"/id 1111\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DavinciDelta"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DavinciDelta"},"content":" String expectedOutput \u003d \"Looking for ID: 1111...\" + System.lineSeparator()+","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DavinciDelta"},"content":" \"No resources with id matching 1111\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DavinciDelta"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DavinciDelta"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DavinciDelta"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DavinciDelta"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DavinciDelta"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DavinciDelta":31}},{"path":"src/test/java/seedu/commands/ExitCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"class ExitCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" ExitCommand exitCommand \u003d new ExitCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" exitCommand.execute(\"\", parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Bye, hope to see you again soon!\" + System.lineSeparator()+","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":28}},{"path":"src/test/java/seedu/commands/FindCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"000verflow"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"000verflow"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"000verflow"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"000verflow"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"000verflow"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"000verflow"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"000verflow"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"000verflow"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"000verflow"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"000verflow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"000verflow"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"000verflow"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"000verflow"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"000verflow"},"content":"public class FindCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"000verflow"},"content":" private FindCommand findCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"000verflow"},"content":" private Parser parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"000verflow"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"000verflow"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"000verflow"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"000verflow"},"content":" void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"000verflow"},"content":" findCommand \u003d new FindCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"000verflow"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"000verflow"},"content":" // Mock resourceList for Parser","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"000verflow"},"content":" parser.resourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"000verflow"},"content":" String[] genreTest1 \u003d {\"horror\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"000verflow"},"content":" String[] genreTest2 \u003d {\"comedy\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"000verflow"},"content":" parser.resourceList.add(new Book(\"Title1\", \"ISBN1\", \"Author1\", genreTest1, 1234));","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"000verflow"},"content":" parser.resourceList.add(new Book(\"Title2\", \"ISBN2\", \"Author2\", genreTest2, 5678));","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"000verflow"},"content":" outContent.reset(); // Clearing any old content","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"000verflow"},"content":" System.setOut(new PrintStream(outContent)); // Redirect System.out","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"000verflow"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"000verflow"},"content":" void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"000verflow"},"content":" System.setOut(originalOut); // Reset System.out after each test","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"000verflow"},"content":" void testSetAndGetTitle() {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"000verflow"},"content":" findCommand.setTitle(\"TitleTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"000verflow"},"content":" assertEquals(\"TitleTest\", findCommand.getTitle());","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"000verflow"},"content":" void testSetAndGetAuthor() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"000verflow"},"content":" findCommand.setAuthor(\"AuthorTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"000verflow"},"content":" assertEquals(\"AuthorTest\", findCommand.getAuthor());","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"000verflow"},"content":" void testSetAndGetISBN() {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"000verflow"},"content":" findCommand.setISBN(\"ISBNTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"000verflow"},"content":" assertEquals(\"ISBNTest\", findCommand.getISBN());","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"000verflow"},"content":" void testSetAndGetID() {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"000verflow"},"content":" findCommand.setID(\"IDTest\");","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"000verflow"},"content":" assertEquals(\"IDTest\", findCommand.getID());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"000verflow"},"content":" void testExecuteWithInvalidFlag() {","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"000verflow"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e findCommand.execute(\"/x InvalidFlag\", parser));","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"000verflow"},"content":" void testExecuteWithNoFilter() {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"000verflow"},"content":" assertThrows(AssertionError.class, () -\u003e findCommand.execute(\"\", parser));","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"000verflow"},"content":" void testExecuteFindTitleMatch() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/t Title1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Title1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"000verflow"},"content":" void testExecuteFindAuthorMatch() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/a Author1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Author1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"000verflow"},"content":" void testExecuteFindISBNMatch() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/i ISBN1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"ISBN1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"000verflow"},"content":" void testExecuteNoMatchesFound() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/t Title3\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"There are no resources found matching the given filters.\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"000verflow"},"content":" void testExecuteMultipleFilters() throws SysLibException {","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"000verflow"},"content":" findCommand.execute(\"/t Title1 /a Author1\", parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Title1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"000verflow"},"content":" assertTrue(outContent.toString().contains(\"Author1\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"000verflow"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"000verflow"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"000verflow"},"content":" void testExecuteInvalidFormat() {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"000verflow"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e findCommand.execute(\"find /z Invalid\", parser));","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"000verflow"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"000verflow"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"000verflow":114}},{"path":"src/test/java/seedu/commands/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"class HelpCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":" void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" helpCommand.execute(\"\", parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Commands available:\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":" \"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" \"/tag TAG /i ISBN [/g GENRE])\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" \"delete: deletes the resource with the specified ID from the library inventory. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. delete /id 123456789)\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" \"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" \"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() + \"exit: displays a farewell message and exits the program (e.g. exit)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":" \"For more information, please refer to our user guide at:\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" \"https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":38,"yingx9":1}},{"path":"src/test/java/seedu/commands/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yingx9"},"content":"package seedu.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yingx9"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yingx9"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yingx9"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yingx9"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yingx9"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yingx9"},"content":"import seedu.util.TestUtil;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":12,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":13,"author":{"gitId":"yingx9"},"content":"import static seedu.commands.ListCommand.GENERIC_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":14,"author":{"gitId":"yingx9"},"content":"import static seedu.commands.ListCommand.FILTER_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"yingx9"},"content":"import static seedu.commands.ListCommand.ZERO_RESOURCES_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":16,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":17,"author":{"gitId":"yingx9"},"content":"import static seedu.ui.UI.LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":19,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yingx9"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yingx9"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yingx9"},"content":"public class ListCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yingx9"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yingx9"},"content":" private List\u003cResource\u003e emptyResourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yingx9"},"content":" private List\u003cResource\u003e testResourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yingx9"},"content":" private TestUtil testUtil \u003d new TestUtil();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yingx9"},"content":" private Command listCommand \u003d new ListCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" void execute() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" testResourceList \u003d TestUtil.fillTestList();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" assertEmptyListMessage();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" assertListByTagBehavior();","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":" assertListByGenreBehavior();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" assertNoFilteredListDisplay();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" private void assertEmptyListMessage() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" String outputMessage \u003d testUtil.getOutputMessage(listCommand, \"\", emptyResourceList);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":" String expectedMessage \u003d GENERIC_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":" expectedMessage +\u003d ZERO_RESOURCES_MESSAGE + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" assertEquals(expectedMessage, outputMessage);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" private void assertListByTagBehavior() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yingx9"},"content":" parser.resourceList \u003d testResourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yingx9"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003elistCommand.execute(\"/tag\", parser));","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yingx9"},"content":" private void assertListByGenreBehavior() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yingx9"},"content":" parser.resourceList \u003d testResourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yingx9"},"content":" assertThrows(IllegalArgumentException.class, ()-\u003elistCommand.execute(\"/g\", parser));","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yingx9"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yingx9"},"content":" private void assertNoFilteredListDisplay() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yingx9"},"content":" String outputMessage \u003d testUtil.getOutputMessage(listCommand, \"/g Thriller\", testResourceList);","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"yingx9"},"content":" String expectedMessage \u003d FILTER_MESSAGE;","lastModifiedDate":"2023-10-26"},{"lineNumber":68,"author":{"gitId":"yingx9"},"content":" expectedMessage +\u003d ZERO_RESOURCES_MESSAGE + LINESEPARATOR;","lastModifiedDate":"2023-10-26"},{"lineNumber":69,"author":{"gitId":"yingx9"},"content":" assertEquals(expectedMessage, outputMessage);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yingx9"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yingx9":72}},{"path":"src/test/java/seedu/parser/DeleteParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"class DeleteParserTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":" public void testParseDeleteWithValidInput() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":" String statement \u003d \"delete /id 1\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":" String result \u003d DeleteParser.parseDelete(statement);","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":" assertEquals(\"1\", result);","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" public void testParseDeleteWithInvalidInput() {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" String statement \u003d \"delete /t hello\";","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" assertThrows(SysLibException.class, () -\u003e DeleteParser.parseDelete(statement));","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":23}},{"path":"src/test/java/seedu/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"class ParserTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" public void testProcessExitCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"exit\";","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Bye, hope to see you again soon!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"bnjm2000"},"content":" public void testProcessHelpCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"Commands available:\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"bnjm2000"},"content":" \"add: adds a new resource to the library inventory.(e.g. add /id ID /t TITLE /a AUTHOR \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"bnjm2000"},"content":" \"/tag TAG /i ISBN [/g GENRE])\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"bnjm2000"},"content":" \"delete: deletes the resource with the specified ID from the library inventory. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"bnjm2000"},"content":" \"(e.g. delete /id 123456789)\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"bnjm2000"},"content":" \"list: list all resources OR filter by certain tags or genre.(e.g. list /tag B /g Fiction\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"yingx9"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"bnjm2000"},"content":" \"find: find a resource by title, author, ISBN or given id. (e.g. find /i 9780763630188)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() + \"exit: displays a farewell message and exits the program (e.g. exit)\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"bnjm2000"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"bnjm2000"},"content":" \"For more information, please refer to our user guide at:\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"bnjm2000"},"content":" \"https://ay2324s1-cs2113t-w11-1.github.io/tp/UserGuide.html\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"bnjm2000"},"content":" public void testProcessUnknownCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"bye\";","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"no commands found. Enter \\\"help\\\" for a list of commands.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"bnjm2000"},"content":" public void testProcessCommands() {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"bnjm2000"},"content":" //Test add","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"bnjm2000"},"content":" String validResponse \u003d \"add /id 1 /t Surrounded by Idiots /a Thomas Erikson \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"bnjm2000"},"content":" \"/tag B /i 9781250255174 /g Self-help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"bnjm2000"},"content":" String output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"bnjm2000"},"content":" String expectedOutput \u003d \"This book is added: Surrounded by Idiots\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();;","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"bnjm2000"},"content":" //Add second book","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"add /id 2 /t The Subtle Art of Not Giving a F*ck /a Mark Manson \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"bnjm2000"},"content":" \"/tag B /i 9780062457714 /g Self-help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"This book is added: The Subtle Art of Not Giving a F*ck\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"yingx9"},"content":" \"____________________________________________________________\" + System.lineSeparator()","lastModifiedDate":"2023-10-26"},{"lineNumber":107,"author":{"gitId":"yingx9"},"content":" + System.lineSeparator();;","lastModifiedDate":"2023-10-26"},{"lineNumber":108,"author":{"gitId":"bnjm2000"},"content":" //Test list","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"Listing all resources in the Library:\" + System.lineSeparator() + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"bnjm2000"},"content":" \"1. [B] ID: 1 Title: Surrounded by Idiots ISBN: 9781250255174 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"bnjm2000"},"content":" \"Author: Thomas Erikson Genre: Self-help\" + System.lineSeparator()+","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"bnjm2000"},"content":" \"2. [B] ID: 2 Title: The Subtle Art of Not Giving a F*ck ISBN: 9780062457714 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"bnjm2000"},"content":" \"Author: Mark Manson Genre: Self-help\" + System.lineSeparator() + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"bnjm2000"},"content":" \"There are currently 2 resource(s).\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"bnjm2000"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"bnjm2000"},"content":" //Test find","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"find /t The Subtle Art of Not Giving a F*ck\";","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"Here are resources that matched the given filters:\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"bnjm2000"},"content":" \"[B] ID: 2 Title: The Subtle Art of Not Giving a F*ck ISBN: 9780062457714 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"bnjm2000"},"content":" \"Author: Mark Manson Genre: Self-help\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();;","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"bnjm2000"},"content":" //Negative find test","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"find /t No Such Book\";","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"000verflow"},"content":" expectedOutput +\u003d \"There are no resources found matching the given filters.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();;","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"bnjm2000"},"content":" //Test delete","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"bnjm2000"},"content":" validResponse \u003d \"delete /id 1\";","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"bnjm2000"},"content":" parser.process(validResponse);","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"bnjm2000"},"content":" output \u003d outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"bnjm2000"},"content":" expectedOutput +\u003d \"Looking for ID: 1...\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"bnjm2000"},"content":" \"This resource is removed: \" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":143,"author":{"gitId":"bnjm2000"},"content":" \"[B] ID: 1 Title: Surrounded by Idiots ISBN: 9781250255174 \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":144,"author":{"gitId":"bnjm2000"},"content":" \"Author: Thomas Erikson Genre: Self-help\" + System.lineSeparator() +","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"bnjm2000"},"content":" \"____________________________________________________________\" + System.lineSeparator();","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedOutput, output);","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"bnjm2000"},"content":" public void testParseAddCommand() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"bnjm2000"},"content":" // Test case 1: Valid input with /tag b","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"bnjm2000"},"content":" String statement1 \u003d \"add /id ID /t TITLE /a AUTHOR /tag b /i ISBN /g GENRE\";","lastModifiedDate":"2023-10-16"},{"lineNumber":153,"author":{"gitId":"bnjm2000"},"content":" String[] expectedArgs1 \u003d {\"ID\", \"TITLE\", \"AUTHOR\", \"b\", \"ISBN\", \"GENRE\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":154,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedArgs1, Parser.parseAddCommand(statement1));","lastModifiedDate":"2023-10-16"},{"lineNumber":155,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":156,"author":{"gitId":"bnjm2000"},"content":" // Test case 2: Invalid input (missing /tag b)","lastModifiedDate":"2023-10-16"},{"lineNumber":157,"author":{"gitId":"bnjm2000"},"content":" String statement2 \u003d \"add /id ID /t TITLE /a AUTHOR /tag TAG /i ISBN /g GENRE\";","lastModifiedDate":"2023-10-16"},{"lineNumber":158,"author":{"gitId":"bnjm2000"},"content":" assertThrows(SysLibException.class, () -\u003e Parser.parseAddCommand(statement2));","lastModifiedDate":"2023-10-16"},{"lineNumber":159,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":160,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":161,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":162,"author":{"gitId":"bnjm2000"},"content":" public void testParseAddBook() throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":163,"author":{"gitId":"bnjm2000"},"content":" // Test case 1: Valid input with /g GENRE","lastModifiedDate":"2023-10-16"},{"lineNumber":164,"author":{"gitId":"bnjm2000"},"content":" String statement1 \u003d \"/id ID /t TITLE /a AUTHOR /tag b /i ISBN /g GENRE\";","lastModifiedDate":"2023-10-16"},{"lineNumber":165,"author":{"gitId":"bnjm2000"},"content":" String[] expectedArgs1 \u003d {\"ID\", \"TITLE\", \"AUTHOR\", \"b\", \"ISBN\", \"GENRE\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":166,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedArgs1, Parser.parseAddBook(statement1));","lastModifiedDate":"2023-10-16"},{"lineNumber":167,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":168,"author":{"gitId":"bnjm2000"},"content":" // Test case 2: Valid input without /g GENRE","lastModifiedDate":"2023-10-16"},{"lineNumber":169,"author":{"gitId":"bnjm2000"},"content":" String statement2 \u003d \"/id ID /t TITLE /a AUTHOR /tag b /i ISBN\";","lastModifiedDate":"2023-10-16"},{"lineNumber":170,"author":{"gitId":"bnjm2000"},"content":" String[] expectedArgs2 \u003d {\"ID\", \"TITLE\", \"AUTHOR\", \"b\", \"ISBN\", null};","lastModifiedDate":"2023-10-16"},{"lineNumber":171,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedArgs2, Parser.parseAddBook(statement2));","lastModifiedDate":"2023-10-16"},{"lineNumber":172,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":173,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":174,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":175,"author":{"gitId":"bnjm2000"},"content":" public void testCreateBook() {","lastModifiedDate":"2023-10-16"},{"lineNumber":176,"author":{"gitId":"bnjm2000"},"content":" String[] args \u003d {\"123\", \"CS2113T\", \"W11\", \"B\", \"1234\", \"Horror\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":177,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":178,"author":{"gitId":"bnjm2000"},"content":" Book book \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":179,"author":{"gitId":"bnjm2000"},"content":" book \u003d Parser.createBook(args);","lastModifiedDate":"2023-10-16"},{"lineNumber":180,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":181,"author":{"gitId":"bnjm2000"},"content":" int expectedId \u003d 123;","lastModifiedDate":"2023-10-16"},{"lineNumber":182,"author":{"gitId":"bnjm2000"},"content":" String expectedTitle \u003d \"CS2113T\";","lastModifiedDate":"2023-10-16"},{"lineNumber":183,"author":{"gitId":"bnjm2000"},"content":" String expectedAuthor \u003d \"W11\";","lastModifiedDate":"2023-10-16"},{"lineNumber":184,"author":{"gitId":"bnjm2000"},"content":" String expectedIsbn \u003d \"1234\";","lastModifiedDate":"2023-10-16"},{"lineNumber":185,"author":{"gitId":"bnjm2000"},"content":" String[] expectedGenres \u003d { \"Horror\" };","lastModifiedDate":"2023-10-16"},{"lineNumber":186,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":187,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedId, book.getId());","lastModifiedDate":"2023-10-16"},{"lineNumber":188,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedTitle, book.getTitle());","lastModifiedDate":"2023-10-16"},{"lineNumber":189,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedAuthor, book.getAuthor());","lastModifiedDate":"2023-10-16"},{"lineNumber":190,"author":{"gitId":"bnjm2000"},"content":" assertEquals(expectedIsbn, book.getISBN());","lastModifiedDate":"2023-10-16"},{"lineNumber":191,"author":{"gitId":"bnjm2000"},"content":" assertArrayEquals(expectedGenres, book.getGenre());","lastModifiedDate":"2023-10-16"},{"lineNumber":192,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":193,"author":{"gitId":"bnjm2000"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":194,"author":{"gitId":"bnjm2000"},"content":" public void testCreateBookInvalidId() {","lastModifiedDate":"2023-10-16"},{"lineNumber":195,"author":{"gitId":"bnjm2000"},"content":" String[] args \u003d {\"not_a_number\", \"Sample Title\", \"Sample Author\", \"\", \"Sample ISBN\", \"Sample Genre\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":196,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":197,"author":{"gitId":"bnjm2000"},"content":" assertThrows(NumberFormatException.class, () -\u003e Parser.createBook(args));","lastModifiedDate":"2023-10-16"},{"lineNumber":198,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":199,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"000verflow":1,"bnjm2000":195,"yingx9":3}},{"path":"src/test/java/seedu/util/TestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"bnjm2000"},"content":"package seedu.util;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"bnjm2000"},"content":"import seedu.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yingx9"},"content":"import seedu.data.Book;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.Resource;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"bnjm2000"},"content":"import seedu.data.SysLibException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"bnjm2000"},"content":"import seedu.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"bnjm2000"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"bnjm2000"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yingx9"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"bnjm2000"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"bnjm2000"},"content":"public class TestUtil {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"bnjm2000"},"content":" public String getOutputMessage(Command c, String m) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"bnjm2000"},"content":" c.execute(m, parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"bnjm2000"},"content":" return outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"bnjm2000"},"content":" public String getOutputMessage(Command c, String m, List\u003cResource\u003e resourceList) throws SysLibException {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"bnjm2000"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"bnjm2000"},"content":" parser.resourceList \u003d resourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"bnjm2000"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"bnjm2000"},"content":" System.setOut(new PrintStream(outputStream));","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"bnjm2000"},"content":" c.execute(m, parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"bnjm2000"},"content":" return outputStream.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"bnjm2000"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"bnjm2000"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yingx9"},"content":" public static List\u003cResource\u003e fillTestList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yingx9"},"content":" List\u003cResource\u003e testResourceList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yingx9"},"content":" String[] genres \u003d {\"Horror\", \"Fiction\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yingx9"},"content":" String[] genresAdventure \u003d {\"Adventure\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yingx9"},"content":" String[] genresNull \u003d {null};","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yingx9"},"content":" Resource test1 \u003d new Resource(\"title1\", \"123123\");","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yingx9"},"content":" Book testBook \u003d new Book(\"title2\", \"123123\", \"author\", genres, 123123);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yingx9"},"content":" Book testBook2 \u003d new Book(\"title3\", \"123123\", \"author\", genresAdventure, 123123);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yingx9"},"content":" Book testBook3 \u003d new Book(\"title3\", \"123123\", \"author\", genresNull, 123123);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"yingx9"},"content":" testResourceList.add(test1);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yingx9"},"content":" testResourceList.add(testBook);","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yingx9"},"content":" testResourceList.add(testBook2);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yingx9"},"content":" testResourceList.add(testBook3);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yingx9"},"content":" return testResourceList;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yingx9"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yingx9"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"bnjm2000"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"bnjm2000":32,"yingx9":20}}] diff --git a/AY2324S1-CS2113T-W11-1_tp_master/commits.json b/AY2324S1-CS2113T-W11-1_tp_master/commits.json index c9b235d..9295b0d 100644 --- a/AY2324S1-CS2113T-W11-1_tp_master/commits.json +++ b/AY2324S1-CS2113T-W11-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"000verflow":[{"date":"2023-10-06","commitResults":[{"hash":"40c098fcf74b1c2282447f9113b643a766c328d3","isMergeCommit":false,"messageTitle":"Add ashokbalaji-aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}},{"hash":"ba10e507f38769c43a032bf8f9367a09dce03291","isMergeCommit":false,"messageTitle":"Add userguide draft","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":99,"deletions":23}}}]},{"date":"2023-10-11","commitResults":[{"hash":"d051634250466c7164160a7fddeb56f1762e79a3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into YingXia-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7b3caa8286c5e5afd39596c9d37aaa83da139f3e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yingx9/YingXia-AboutUs","messageBody":"Update AboutUs.md and add Portfolio Page","fileTypesAndContributionMap":{}},{"hash":"ce04bd2fd92aa288fc50505baa20550cef504563","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AY2324S1-CS2113T-W11-1/branch-AshokBalaji-userguide","messageBody":"Add userguide draft","fileTypesAndContributionMap":{}},{"hash":"bd25c10208589cf71225db3fa2e85eb80cf14e72","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WuXingyu-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2eb93ed11019095c9d83522d710cff1951ff90ee","isMergeCommit":true,"messageTitle":"Merge pull request #3 from DavinciDelta/WuXingyu-AboutUs","messageBody":"Add WuXingyu-AboutUs","fileTypesAndContributionMap":{}},{"hash":"da93b03bf043240cb13cd891d3f7d5ba034f221d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-AshokBalaji-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"751016df50864854566f9a6f330cc416719f3f8c","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AY2324S1-CS2113T-W11-1/branch-AshokBalaji-AboutUs","messageBody":"Add ashokbalaji-aboutus","fileTypesAndContributionMap":{}},{"hash":"fbcd9e994f8f6d371570e0837d0b9df5d55e0a65","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6e0c5086aa5ce4c4ef524b1109975395f85b10ec","isMergeCommit":true,"messageTitle":"Merge pull request #6 from bnjm2000/master","messageBody":"Add Benjamin-AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"7ac4de161937c8f68caedf661d33ac2743bce93f","isMergeCommit":false,"messageTitle":"Revert \"Add code from AddressBook\"","messageBody":"This reverts commit 24a54a13e9bff5754c97196f670acb1db3f9c3fe.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1937}}},{"hash":"15df575857850f9910d1277c039fd733830fde91","isMergeCommit":false,"messageTitle":"Add UI Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":61,"deletions":11}}},{"hash":"9598cd960fd0593f0decb94a2ad3150e18b70383","isMergeCommit":false,"messageTitle":"Update UI package","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":12}}},{"hash":"cbd5935ccf882033ad0b08db364596550f560f60","isMergeCommit":false,"messageTitle":"Rename Ui.java to UI.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"dbd0e6f0e289653a11048a5d9c19c7a444448864","isMergeCommit":false,"messageTitle":"Update UI package bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":11}}},{"hash":"9a1adb0d5f9728d7fd6ddf0eb857fe41242adf24","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-AshokBalaji-UI-class\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into branch-AshokBalaji-UI-class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"61cfb3cce6305613102703e161b14a648269c2a3","isMergeCommit":false,"messageTitle":"Update UI package bug","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"7e4f3fe7f71a7459f1bd36c678648852307f3437","isMergeCommit":false,"messageTitle":"Update tests and fix package structure","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":14},"other":{"insertions":22,"deletions":22}}},{"hash":"234d4f7e45be31af96739a72dbc38e756ac6e307","isMergeCommit":true,"messageTitle":"Merge pull request #22 from AY2324S1-CS2113T-W11-1/branch-AshokBalaji-UI-class","messageBody":"Add UI Class","fileTypesAndContributionMap":{}},{"hash":"11762124503a2c817f64b4270a43e8aacf3f413d","isMergeCommit":true,"messageTitle":"Merge pull request #23 from bnjm2000/add_portfolio","messageBody":"Add portfolio and updated README.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"53cf6f5c45786d68a96b75e355f9b23f4e85d942","isMergeCommit":false,"messageTitle":"Add FindCommand class","messageBody":"Refactored structure as well\n","fileTypesAndContributionMap":{"functional-code":{"insertions":107,"deletions":7},"other":{"insertions":3,"deletions":4}}},{"hash":"e47758599f53faae99cd80ef54ce1645c93bd29e","isMergeCommit":true,"messageTitle":"Merge pull request #33 from JoanneJo/JoanneAng-TagResource","messageBody":"Add Tag Function","fileTypesAndContributionMap":{}},{"hash":"8bfd4312374db9102e7007cac4eb3d716c3533b4","isMergeCommit":true,"messageTitle":"Merge pull request #34 from yingx9/YingXia-ListBySpecificArguments","messageBody":"Update Listing by specific filters for ListCommand.Java","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"c506bdc66a04030dcab18d1d8558dfe23fec32c2","isMergeCommit":false,"messageTitle":"Add Junit tests for FindCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":19},"test-code":{"insertions":126,"deletions":1}}},{"hash":"ecdbae3f3a74ddc3de8d01da6cc64fe1a557ff7b","isMergeCommit":false,"messageTitle":"Add logging and java assertions to FindCommand class, updated FindCommandTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":3},"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-26","commitResults":[{"hash":"0643b459f813d1557ce46b3d1f313e42921a2afe","isMergeCommit":false,"messageTitle":"Update FindCommand with new parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":29},"test-code":{"insertions":0,"deletions":11}}},{"hash":"f2321f49afd6722491ed22ce65cf805c4856bf35","isMergeCommit":true,"messageTitle":"Merge pull request #72 from 000verflow/branch-AshokBalaji-UpdateFindCommand","messageBody":"Update FindCommand with new parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"3669b239dc0f2e56b1ac7d0fec9418ab1ef9e5bd","isMergeCommit":false,"messageTitle":"Add find command details on DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":69,"deletions":4}}}]}],"bnjm2000":[{"date":"2023-10-09","commitResults":[{"hash":"efad7d965c627a182d0c515fbcf8bd652d5f7b75","isMergeCommit":false,"messageTitle":"Add Benjamin-AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-11","commitResults":[{"hash":"11fbaf7ff4a1c16bd6e857e1bfd19094d43fbfb9","isMergeCommit":false,"messageTitle":"Add portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":0}}},{"hash":"f98ad3ecdb9bf4a008479b664430633fe6aee154","isMergeCommit":false,"messageTitle":"Fix portfolio link","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-14","commitResults":[{"hash":"ff6ecc4e701b239a826fcd503989cca981a38809","isMergeCommit":false,"messageTitle":"Add portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":9}}},{"hash":"c5bb57406ed0171f9b20242b11d01e4955ec7839","isMergeCommit":true,"messageTitle":"Merge pull request #25 from AY2324S1-CS2113T-W11-1/WuXingyu-Resource","messageBody":"Add Resource class","fileTypesAndContributionMap":{}},{"hash":"fee0f659873ca0be326386c791db3e379df73714","isMergeCommit":false,"messageTitle":"Add HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1}}},{"hash":"a01128ec5feae99924bb3c327d94bba7e5d9a31d","isMergeCommit":false,"messageTitle":"Fix ExitCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":3}}},{"hash":"243fa1457017b73e4edbd1929fadadd779e2de01","isMergeCommit":false,"messageTitle":"Changed unknown command message.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"3806b18ebb2a19a8bb7a2012027cda0f2f705459","isMergeCommit":false,"messageTitle":"Moved help message to UI class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":8}}},{"hash":"4f172b206ce42c544432438b8384906a12d5dc98","isMergeCommit":true,"messageTitle":"Merge pull request #29 from yingx9/YingXia-UpdateListCommand","messageBody":"Update ListCommand and edit Resource and Book","fileTypesAndContributionMap":{}},{"hash":"8d3ec47b216a8ecce72971e1286cd5c7816e3e0d","isMergeCommit":false,"messageTitle":"Changed syntax to \"exit\" and updated test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-15","commitResults":[{"hash":"41e96d180eea8819810b89f4972503658bc58533","isMergeCommit":true,"messageTitle":"Merge pull request #31 from JoanneJo/JoanneAng-AddCommand","messageBody":"Update AddCommand.java and Add SysLibException.java","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"7ff86171a0fd13c77b3cf121db7fe6884d0b3d86","isMergeCommit":false,"messageTitle":"Add Junit testing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":183,"deletions":0}}},{"hash":"b567bf5aa32fe02c4fd1dfb89a7015f775c830c5","isMergeCommit":false,"messageTitle":"Add more Junit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":75,"deletions":2}}},{"hash":"307dadb3f1cadb6f4656b5a341d45ea46c7e249a","isMergeCommit":false,"messageTitle":"Fix checkstye","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":26,"deletions":17}}},{"hash":"86cf0bf0f325391532da1bcc682d06a7ad6362d6","isMergeCommit":false,"messageTitle":"Fix checks not working on Windows","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":35,"deletions":33}}},{"hash":"d6f62f5ccc65e022901ad84f3267897d80378000","isMergeCommit":true,"messageTitle":"Merge pull request #39 from yingx9/YingXia-UpdateUserGuide","messageBody":"Update UserGuide.md for List and minor change to ListCommand","fileTypesAndContributionMap":{}},{"hash":"bae7e026d74680fe4a0047fa954ce271f2bffaba","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into add_Junit","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Update UserGuide.md for List and minor change to ListCommand\n","fileTypesAndContributionMap":{}},{"hash":"3e910fc9d53b77f127940bc75640b25da44f6808","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":13,"deletions":13}}},{"hash":"db5883414825e7a5e441ce1878551dd7d555d7d2","isMergeCommit":false,"messageTitle":"Fix comment indentation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":11,"deletions":11}}},{"hash":"83d05e7e51521c14924622be0f8d0597145b6eb5","isMergeCommit":false,"messageTitle":"Fix Try #1","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":11,"deletions":11}}},{"hash":"a81d766d11a375879c1f602842828531a8604d25","isMergeCommit":false,"messageTitle":"Add TestUtil and corrected Junit","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":40,"deletions":3}}},{"hash":"48875226e1bf55b48404da72ad34eab3eec785d4","isMergeCommit":true,"messageTitle":"Merge pull request #40 from yingx9/YingXia-UpdateListPrinting","messageBody":"Update ListCommand to use lineSeparator() and add more checks","fileTypesAndContributionMap":{}},{"hash":"affd9379953ddff889923ab527eedcb8736d6536","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":6}}},{"hash":"08a718177bfc3197280e2e6a5f1b74c34478186e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into add_Junit","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Fix lines to not exceed 120 characters for coding standard\n Update ListCommand to use lineSeparator() and add more checks\n","fileTypesAndContributionMap":{}},{"hash":"dda3ca33533312deceb333e38d5eb526948abdb1","isMergeCommit":false,"messageTitle":"Fix windows error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":2}}},{"hash":"e47ca19cf52aedb1ee571f7ae8ac7cae8fe4717d","isMergeCommit":false,"messageTitle":"Fix Windows error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"04906e63ebf2b3be29a4f8cd076683ee9d5777f6","isMergeCommit":false,"messageTitle":"Fix windows error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"test-code":{"insertions":1,"deletions":1}}},{"hash":"09ad6907d3798658b4b35994f88bd432abb995b9","isMergeCommit":false,"messageTitle":"Fix failed test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"a378b1122c47e5682c500f7615e125ef6e580665","isMergeCommit":false,"messageTitle":"Fix code to have better consistency","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":20},"test-code":{"insertions":30,"deletions":16}}},{"hash":"4586311a7acee699ecf66d65ab4402c569af92f3","isMergeCommit":true,"messageTitle":"Merge pull request #41 from yingx9/YingXia-AddListCommandTest","messageBody":"Add jUnit tests for ListCommand","fileTypesAndContributionMap":{}},{"hash":"0d98a06f824e5fa388728e538a12933f4cb95efb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into BenjaminNg_consistency","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Update EXPECTED.TXT and input.txt for testing\n Fix windows error\n Fix check style error\n Add jUnit tests for ListCommand\n","fileTypesAndContributionMap":{}},{"hash":"816feeda7fb4686d2872e332338372a28eb35064","isMergeCommit":false,"messageTitle":"Fix checks after merge","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3},"test-code":{"insertions":21,"deletions":5}}},{"hash":"2d31c5b83d50f5c0c1cca48f588661ac6a44e6d0","isMergeCommit":false,"messageTitle":"Fix failed test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"1171880f0dfcbe51c57f3c8c2ed253170606ea19","isMergeCommit":false,"messageTitle":"Fix failed checks","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-17","commitResults":[{"hash":"97bad5aea57f5f451ee8ca636e72807e15defeb3","isMergeCommit":false,"messageTitle":"Fix helpCommand to be consistent with UG","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":5},"docs":{"insertions":1,"deletions":1},"test-code":{"insertions":19,"deletions":13}}},{"hash":"969c6d2ed053ae8345ad0b5367f9ff113879b550","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into BenjaminNg_FixHelpCommand","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Fix failed checks\n Fix failed test\n Fix checks after merge\n Fix code to have better consistency\n\n# Conflicts:\n#\tsrc/main/java/seedu/ui/UI.java\n#\tsrc/test/java/seedu/commands/HelpCommandTest.java\n#\tsrc/test/java/seedu/parser/ParserTest.java\n#\ttext-ui-test/EXPECTED.TXT\n","fileTypesAndContributionMap":{}},{"hash":"7f270f77a3b68d595ddb92c68f1aa96dc0e3c1f8","isMergeCommit":false,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":10},"test-code":{"insertions":0,"deletions":24}}},{"hash":"b44806541a1a31074bc32d9a7f54bc3b3daa2ff1","isMergeCommit":true,"messageTitle":"Merge pull request #45 from yingx9/YingXia-FixNullGenreBug","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"256dfd39999328567020cbfe6bbcff0b4730de0b","isMergeCommit":true,"messageTitle":"Merge pull request #46 from yingx9/YingXia-UpdateListGenre","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"effcd9da28de13988cba3b1caab69dd2f2e5b1bd","isMergeCommit":true,"messageTitle":"Merge pull request #51 from yingx9/YingXia-AddListCommandAssertion","messageBody":"Add assertion to ensure ListCommand works as intended","fileTypesAndContributionMap":{}},{"hash":"1e6825dff3c2f6d0aae77ec5048dac06227f015e","isMergeCommit":true,"messageTitle":"Merge pull request #53 from 000verflow/Add-Assertions-Logging-FindCommand","messageBody":"Add logging and java assertions to FindCommand class","fileTypesAndContributionMap":{}},{"hash":"3733b72dc6d2b395228ddd7a872b80f5686f534c","isMergeCommit":false,"messageTitle":"Add assert and logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":64,"deletions":4}}}]},{"date":"2023-10-26","commitResults":[{"hash":"5016c2e6074261fc5964ddfff0f7eb27d96cd571","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":56,"deletions":12}}},{"hash":"fe18b54784d8ad6cefddd54f43b9dfc4d95e44bd","isMergeCommit":false,"messageTitle":"Add help and bye manual testing","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":1}}},{"hash":"226408b08990865f86550c15a9c1128e24490679","isMergeCommit":true,"messageTitle":"Merge pull request #75 from yingx9/YingXia-UpdateListDG","messageBody":"Update ListCommand and List Implementation of DG","fileTypesAndContributionMap":{}}]}],"JoanneJo":[{"date":"2023-10-04","commitResults":[{"hash":"d4b23856f14360e5e02b8b48f1fa8d867104aa99","isMergeCommit":false,"messageTitle":"Add personal details to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-05","commitResults":[{"hash":"74ce9366bfeba2e78b22b08db06017a574898712","isMergeCommit":false,"messageTitle":"Update AboutUs.md and Add JoanneAng.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-15","commitResults":[{"hash":"6642630870c3a7e6899d35768f20336136f8ba75","isMergeCommit":false,"messageTitle":"Update AddCommand.java and Add SysLibException.java","messageBody":"Updated UserGuide.md so that all commands are\nusing the same tags for the same type of data.\nUI.java is therefore edited to standardize the\nhelp message.\n\nModified Book.java to remove synopsis from the\nobject and add genres. toString() is modified to\ndisplay genres.\n\nImplemented the add command to add books to the\nresource list. Validated user input for add command.\n\nChanged the naming of taskList to resourceList and\nadded SysLibException.java. Hence, edited\nCommand.java, DeleteCommand.java, ListCommand.java,\nand Parser.java.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":102,"deletions":39},"docs":{"insertions":33,"deletions":26}}},{"hash":"97f427ecac516acd184a6a24eb9aa5a62c8bd731","isMergeCommit":false,"messageTitle":"Update Book.java, AddCommand.java, and Parser.java","messageBody":"Updated to pass the checks.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":9}}},{"hash":"a6eb7919209e44ae45ed5fdab02d2447a377ddcd","isMergeCommit":false,"messageTitle":"Add Tag Function","messageBody":"Added tag function to identify and specify the\ntype of resources added.\n\nModified parseAddCommand method to be more generic.\nAdded parsing and validation methods for adding\nbooks.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":105,"deletions":59},"docs":{"insertions":2,"deletions":2}}},{"hash":"eb76d7512bd86add4df324bc90fb72ccb28a838c","isMergeCommit":false,"messageTitle":"Update AddCommand.java and Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":6}}},{"hash":"0d7af8aebc811a4ff9b851c0e322996edf43dc96","isMergeCommit":false,"messageTitle":"Update UserGuide.md and Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-16","commitResults":[{"hash":"834fcdd733a92644b85cc8a507de7bbfd736d321","isMergeCommit":true,"messageTitle":"Merge pull request #35 from DavinciDelta/WuXingyu-DeleteCommand","messageBody":"Add Delete Command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"38a8d4706b95c1b71e8ed427ef64e64b0448d972","isMergeCommit":true,"messageTitle":"Merge pull request #49 from 000verflow/Add-FindCommandTest","messageBody":"Add Junit tests for FindCommand","fileTypesAndContributionMap":{}},{"hash":"3dc4400af9db7c3713fa071647fb9d32baf5181d","isMergeCommit":true,"messageTitle":"Merge pull request #50 from DavinciDelta/WuXingyu-DeleteTesting","messageBody":"Add DeleteCommand Testing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"dd157775f08701fc6a2945c72d7ddd4eccb29665","isMergeCommit":true,"messageTitle":"Merge pull request #55 from yingx9/YingXia-UpdateListCommandParsing","messageBody":"Update logic and code quality of ListCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"ed7a3cc3a2b98b526a8b2901e6eac90a58555271","isMergeCommit":false,"messageTitle":"Add AddCommand JUnit Tests","messageBody":"Added addCommand JUnit tests to AddCommandTest.java.\nUpdated Book.java and Parser.java.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0},"test-code":{"insertions":58,"deletions":0}}},{"hash":"2c2e658a363c148a823aa30b74af030c1015aace","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":3}}}]},{"date":"2023-10-26","commitResults":[{"hash":"68271b08f8aa57213e668aef11dd07b64b33fb19","isMergeCommit":true,"messageTitle":"Merge pull request #71 from yingx9/YingXia-DGPlantUml","messageBody":"Repurpose style, architecture.puml from Addressbook","fileTypesAndContributionMap":{}},{"hash":"c83c8d24dbe24a1d92dfa2a5cc07c32ce8ea3e53","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"Added on to the developer guide and included parts\nfor the add feature.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5},"docs":{"insertions":172,"deletions":3}}}]}],"DavinciDelta":[{"date":"2023-10-05","commitResults":[{"hash":"20d84b8a2deaed74e86d4c49ff90766db2fd1d7d","isMergeCommit":false,"messageTitle":"Add AboutUs","messageBody":"Included my own about us\n","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}}]},{"date":"2023-10-13","commitResults":[{"hash":"f816d329501fbc059fac7bc29b8449c0aa6d39ff","isMergeCommit":false,"messageTitle":"Basic abstract Command","messageBody":"Included the basic abstract command for reference, with delete code implemented\n","fileTypesAndContributionMap":{"functional-code":{"insertions":117,"deletions":0}}},{"hash":"c97d2cec899d51e82fa979133c029d496a59bb91","isMergeCommit":false,"messageTitle":"Revert \"Basic abstract Command\"","messageBody":"This reverts commit f816d329501fbc059fac7bc29b8449c0aa6d39ff.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":117}}}]},{"date":"2023-10-14","commitResults":[{"hash":"66cb8f164903cc7b8dd1c4e2f37449f49b783a53","isMergeCommit":true,"messageTitle":"Merge pull request #19 from yingx9/WuXingYu-BasicStructure","messageBody":"Add XingYu\u0027s Command and Parser from iP project","fileTypesAndContributionMap":{}},{"hash":"fae2e8bde57a2bcdca664f910751520047b3cb86","isMergeCommit":false,"messageTitle":"Add resource","messageBody":"Include resource class with book class.\n\nInclude basic add and list commands for testing\n","fileTypesAndContributionMap":{"functional-code":{"insertions":115,"deletions":3}}},{"hash":"d168a5972836ae6563d2c2ff0f4dc4500e17bfb8","isMergeCommit":true,"messageTitle":"Merge from master","messageBody":"Include changes from master\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"18ae4568148b6a244a6954b2d645a6396383d92e","isMergeCommit":false,"messageTitle":"Add Delete Command","messageBody":"Added the delete command with it\u0027s parser\n","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":8}}}]},{"date":"2023-10-17","commitResults":[{"hash":"4b21bf920d2abd9b8d5ca763b6cb16a40a87e5ff","isMergeCommit":false,"messageTitle":"Add general validate and parse function","messageBody":"Include a validate and parse function that can be used for all command to decrease complexity of code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":3}}},{"hash":"460604675bb122c09dd57d41481aad943423a7d2","isMergeCommit":false,"messageTitle":"Remove print statements","messageBody":"Remove debugging print statements\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"9c24aadd4353ff76d44e33afc61d3d758704f474","isMergeCommit":false,"messageTitle":"Update Command","messageBody":"Remove redundant code and improve style\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"4d4e242a5a8b83bfae05457a81c2ae027d999c3b","isMergeCommit":false,"messageTitle":"Add DeleteCommand Testing","messageBody":"Included J unit testing for DeleteComand\n","fileTypesAndContributionMap":{"test-code":{"insertions":46,"deletions":0}}},{"hash":"862395cfe14800213003b307dcf087084245681f","isMergeCommit":false,"messageTitle":"Update DeleteCommandTest.java","messageBody":"Updated DeleteCommandTest\n","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":17}}},{"hash":"92e2f73b5371af344b6816b12e4013c4800300e6","isMergeCommit":false,"messageTitle":"Remove redundant imports","messageBody":"Removed redundant imports to improve clarity\n","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":2}}},{"hash":"360606f9d100648710f69f6c9b8ed59e9da91041","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WuXingyu-ParsingAbstraction","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"dae3e42c416444c4b6515a99bdb72c4b35e06356","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WuXingyu-ParsingAbstraction","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29d5789812c41805fbd1bab9a073d8baa2881793","isMergeCommit":false,"messageTitle":"Update validate and parsing","messageBody":"Update parsing into abstract Command class\n","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":27}}},{"hash":"7b07b79090bec34138f9cd269e9a17594cd4994c","isMergeCommit":false,"messageTitle":"Update style","messageBody":"Remove redundant imports\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"e2f835aeff05274f1bc1177563fd2ab439494762","isMergeCommit":false,"messageTitle":"Update AddCommand","messageBody":"Changed AddCommand isbn to i\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"bd37b380149d2f2f85f500c4d6da73dbe40e3fc3","isMergeCommit":false,"messageTitle":"Update genre","messageBody":"Change genre for add command\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2240d9c6cdeaa91c620056f02f8f3af007701523","isMergeCommit":false,"messageTitle":"Improve validation","messageBody":"Included more validation checks for duplicate arguments\n\nAllow for aliasing for arguments\n","fileTypesAndContributionMap":{"functional-code":{"insertions":62,"deletions":15}}},{"hash":"da37d39f6e07a7a4d0171c5109158a737e7e91b0","isMergeCommit":false,"messageTitle":"Fix validator","messageBody":"Prevent clash of metacharacters in strings and capital letters with validator\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-23","commitResults":[{"hash":"9ca77c1f5398f3ee3e36892e95d939757a18b035","isMergeCommit":true,"messageTitle":"Merge pull request #65 from JoanneJo/JoanneAng-AddCommandJUnit","messageBody":"Add AddCommand JUnit Tests","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"f1c67d44a0c3306c28b454edfa5cc578ae3b17d9","isMergeCommit":true,"messageTitle":"Merge pull request #66 from yingx9/YingXia-EnableAssertion","messageBody":"Enable assertions in Gradle","fileTypesAndContributionMap":{}},{"hash":"fcbdbe6b9e56b76f011dd1383e5ebf1fd8d11eb6","isMergeCommit":false,"messageTitle":"Include assertion in DeleteCommand","messageBody":"Include a generic assertion for deleteCommand\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"c90927f278161ceb6bd90171ff4431ab5a81ddb7","isMergeCommit":true,"messageTitle":"Merge branch \u0027AddAssertion\u0027 into UpdateDeveloperGuide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"85745dae00595ea292ea6bbc4b30c74c43f49ba0","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"Update the developer guide with the basic information\n","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":6}}}]}],"yingx9":[{"date":"2023-10-04","commitResults":[{"hash":"d2a39c983b779d162587aa54cdcc043d19acb42b","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2023-10-05","commitResults":[{"hash":"b1a23ae973590faec4fa49548e661798cddc354c","isMergeCommit":false,"messageTitle":"Update AboutUs.md and add Portfolio Page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}}]},{"date":"2023-10-11","commitResults":[{"hash":"34113bf6369cf3e72c81bad632b546565825c15e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from JoanneJo/JoanneAng-AboutUs","messageBody":"Add personal details to AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"24a54a13e9bff5754c97196f670acb1db3f9c3fe","isMergeCommit":false,"messageTitle":"Add code from AddressBook","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1937,"deletions":0}}},{"hash":"4c73795256c18d337edb3cd0d8fd6e5e95854417","isMergeCommit":true,"messageTitle":"Merge pull request #16 from yingx9/YingXia-AddressBook","messageBody":"Add code from AddressBook","fileTypesAndContributionMap":{}},{"hash":"8fdb83fc66cf61cec1707849a12140f63547934c","isMergeCommit":false,"messageTitle":"Add XingYu\u0027s Command and Parser from iP project","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":125,"deletions":0}}},{"hash":"bffe4d35fbfddbd14885722e201bf230cd6a9453","isMergeCommit":false,"messageTitle":"Update ListCommand and edit Resource and Book","messageBody":"As Resource is a generic class, Book can inherit and override\ntoString to print its own specific details\n\nHence,\nResource.java: Add toString method to be overridden by Book\nBook.java: Override parent toString method\n","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":5},"docs":{"insertions":1,"deletions":1}}},{"hash":"6dcad7eeea645efabb2c7991d22053542764e697","isMergeCommit":true,"messageTitle":"Merge pull request #27 from bnjm2000/add_HelpCommand","messageBody":"Add HelpCommand","fileTypesAndContributionMap":{}},{"hash":"8ebfcaf95769d42cdf6ff8effed30582b2abbf09","isMergeCommit":true,"messageTitle":"Merge pull request #28 from bnjm2000/add_ExitCommand","messageBody":"Add ExitCommand","fileTypesAndContributionMap":{}},{"hash":"8336568d113cb4e16f4c7936c6d8254bc5d4ec2f","isMergeCommit":true,"messageTitle":"Merge pull request #30 from bnjm2000/add_ExitCommand","messageBody":"Change syntax to \"exit\" and updated test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"8365f041ce1578f5258123ae6f612456b752747f","isMergeCommit":true,"messageTitle":"Merge pull request #32 from 000verflow/Add-FindCommand","messageBody":"Add FindCommand class","fileTypesAndContributionMap":{}},{"hash":"e961ad179fefc5fe022232e8efaf73bbb1065a45","isMergeCommit":false,"messageTitle":"Update Listing by specific filters for ListCommand.Java","messageBody":"Librarians may want an overview of resources by categories such\nas tag and genre\n\nHence, add filter methods to ListCommand to filter by Tag, Genre,\nor Both\n","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":8}}}]},{"date":"2023-10-16","commitResults":[{"hash":"ce80c867361f341512178783328995160bb24ca5","isMergeCommit":false,"messageTitle":"Update UserGuide.md for List and minor change to ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4},"docs":{"insertions":11,"deletions":8}}},{"hash":"8c30d1ef8dbba12f7d7807c9c6c3809726b2e1d4","isMergeCommit":false,"messageTitle":"Update ListCommand to use lineSeparator() and add more checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":11}}},{"hash":"ed23a422c3bc47ee6e56abb377be77f13c27e4bc","isMergeCommit":false,"messageTitle":"Fix lines to not exceed 120 characters for coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"69362cc4634c29603bcee3690e6ac5cf11f530c8","isMergeCommit":true,"messageTitle":"Merge pull request #38 from bnjm2000/add_Junit","messageBody":"Add Junit","fileTypesAndContributionMap":{}},{"hash":"4e21bd1fc5c7dcf2ef84b90dd6e05e481e5b48f3","isMergeCommit":false,"messageTitle":"Add jUnit tests for ListCommand","messageBody":"To ensure ListCommand is works as intended, add tests such as:\n1. Ensure list does not crash SysLib if executed when there are no\nresources\n2. Ensure missing values for tag and genre filter throws exception\n3. Ensure listing with filters does not crash SysLib if there are\nno found resources matching filters\n","fileTypesAndContributionMap":{"test-code":{"insertions":101,"deletions":0}}},{"hash":"b62afec7114450326fdb9237456383a9845f62dd","isMergeCommit":false,"messageTitle":"Fix check style error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":13}}},{"hash":"871ae927c0777d5e302d720cf8a377459bac1304","isMergeCommit":false,"messageTitle":"Fix windows error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"446c9c1b9d6b76ce5b9b366d67eba021b3075894","isMergeCommit":true,"messageTitle":"Merge pull request #42 from bnjm2000/BenjaminNg_consistency","messageBody":"Fix consistency","fileTypesAndContributionMap":{}},{"hash":"61bca2d384d09bf9fce54fd2e5a13fa913fb028b","isMergeCommit":false,"messageTitle":"Fix bug where listing by genre crashes SysLib","messageBody":"When a book is added without a genre, SysLib crashes when listing\nby genre\n\nHence add a check to hasGenre method to return false when a book has\nno genre\n\nNote in future developments, if createBook changes its method of\ncreating genres array, this fix has to be updated\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0},"test-code":{"insertions":4,"deletions":1}}},{"hash":"8efd8319a62d5e716070bf29aadaa27690a176de","isMergeCommit":true,"messageTitle":"Merge pull request #44 from bnjm2000/BenjaminNg_FixHelpCommand","messageBody":"Fix HelpCommand","fileTypesAndContributionMap":{}},{"hash":"94f1c1b220672138c830e6ab79721ce84c1eb3da","isMergeCommit":false,"messageTitle":"Fix bug where multiple genres causes list filter to not work","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":7}}},{"hash":"7277e0d587c97e762d22c5a1e829b859b648b9b8","isMergeCommit":false,"messageTitle":"Update method of checking genre again for ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":4}}},{"hash":"ea49ab338b61b8cf5cdb56c7e4b3679a1b1a91b7","isMergeCommit":false,"messageTitle":"Add assertion to ensure ListCommand works as intended","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"5eb00e5f0f4e350a35924a1cb0fe5faa6d6201e6","isMergeCommit":true,"messageTitle":"Merge pull request #54 from bnjm2000/BenjaminNg_addAssertandLogging","messageBody":"Add assert and logging for HelpCommand and ExitCommand","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"d25c9b66e18042f05cf523e9875bdd7eba9be49d","isMergeCommit":true,"messageTitle":"Merge pull request #47 from DavinciDelta/WuXingyu-ParsingAbstraction","messageBody":"Add general validate and parse function","fileTypesAndContributionMap":{}},{"hash":"8e0d91820deea617c37ecaf1dfc69fefade72c9a","isMergeCommit":false,"messageTitle":"Update logic and code quality of ListCommand","messageBody":"There are also many repeats of System.lineSeparator + \"------\" etc\n\nHence update constant LINEDIVIDER in UI class to be public, and add\nSEPARATOR_LINEDIVIDER constant for use to tidy up code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":107,"deletions":129},"test-code":{"insertions":14,"deletions":13}}}]},{"date":"2023-10-23","commitResults":[{"hash":"8507b3cd0107300ca6e7645b7ea6b0d311e5b9d2","isMergeCommit":false,"messageTitle":"Enable assertions in Gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-24","commitResults":[{"hash":"41ef8d4d05c823217fd470fd2b0d5ce75cc9b755","isMergeCommit":true,"messageTitle":"Merge pull request #68 from DavinciDelta/AddAssertion","messageBody":"Include assertion in DeleteCommand","fileTypesAndContributionMap":{}},{"hash":"b36525d5ee13cdc1f2ef8fb4a9472930658ca9b1","isMergeCommit":true,"messageTitle":"Merge pull request #69 from DavinciDelta/UpdateDeveloperGuide","messageBody":"Update developer guide","fileTypesAndContributionMap":{}},{"hash":"7b8ffa67e21258e44d6123138f6526cf6ec70478","isMergeCommit":false,"messageTitle":"Repurpose style, architecture.puml from Addressbook","messageBody":"Add a draft architecture diagram\n","fileTypesAndContributionMap":{"docs":{"insertions":110,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"0aea8979e3591fdba501ce8032615bd126a1555c","isMergeCommit":false,"messageTitle":"Add more structure to the Developer\u0027s Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":0}}},{"hash":"b83bc4d4d00080b7f0ce0afc2896a051e7171889","isMergeCommit":false,"messageTitle":"Add Sequence Diagram for ListCommand","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":84,"deletions":0}}}]},{"date":"2023-10-26","commitResults":[{"hash":"f09c1bf2895d25e06455027821024ce74864ead9","isMergeCommit":true,"messageTitle":"Merge pull request #74 from JoanneJo/JoanneAng-DeveloperGuide","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"474936b9006df0c0a61054b29262af71487c4ffa","isMergeCommit":false,"messageTitle":"Update ListCommand and List Implementation of DG","messageBody":"Add a Messages class to format messages with frequently used\nline separators and dividers\n\nMove hasGenre to Resources class so it can be used for other purpose\n\nUpdate more details about ListCommand to DG\n","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":75},"docs":{"insertions":16,"deletions":6},"test-code":{"insertions":10,"deletions":11}}},{"hash":"59cae2daeb0fb11a82e05710e3f9f504f5748974","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"73265af04a474da052dbbe9cdda0066e4c0cf1a0","isMergeCommit":false,"messageTitle":"Fix ListCommandTest checkstyle error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":1}}},{"hash":"10159022ea4dc325910969bd62ba81407ec235cf","isMergeCommit":false,"messageTitle":"Update List DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":5}}},{"hash":"2d5ffa410ef7ee5a7a7dd822881d60585ac03a1e","isMergeCommit":true,"messageTitle":"Merge pull request #76 from bnjm2000/BenjaminNg-DG-Manual-Testing","messageBody":"Add more user stories as well as manual testing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"e1ef61a3c639ad009ebfada3524d13be611ffb01","isMergeCommit":true,"messageTitle":"Merge pull request #77 from 000verflow/update-developer-guide","messageBody":"Add find command details on DG","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"000verflow":{"docs":155,"functional-code":198,"test-code":116},"bnjm2000":{"docs":83,"functional-code":104,"test-code":316},"JoanneJo":{"docs":187,"functional-code":151,"test-code":58},"DavinciDelta":{"docs":14,"functional-code":214,"test-code":31},"yingx9":{"docs":256,"functional-code":266,"test-code":96,"other":1}},"authorContributionVariance":{"000verflow":121518.336,"bnjm2000":12672.572,"JoanneJo":5522.0083,"DavinciDelta":2554.5056,"yingx9":119501.336},"authorDisplayNameMap":{"000verflow":"CS2113T-W11-1 VELU..LAJI","bnjm2000":"CS2113T-W11-1 BENJ..MING","JoanneJo":"CS2113T-W11-1 JOAN..LING","DavinciDelta":"CS2113T-W11-1 WU X..NGYU","yingx9":"CS2113T-W11-1 LOKE.. XIA"}} +{"authorDailyContributionsMap":{"000verflow":[{"date":"2023-10-06","commitResults":[{"hash":"40c098fcf74b1c2282447f9113b643a766c328d3","isMergeCommit":false,"messageTitle":"Add ashokbalaji-aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}},{"hash":"ba10e507f38769c43a032bf8f9367a09dce03291","isMergeCommit":false,"messageTitle":"Add userguide draft","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":99,"deletions":23}}}]},{"date":"2023-10-11","commitResults":[{"hash":"d051634250466c7164160a7fddeb56f1762e79a3","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into YingXia-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7b3caa8286c5e5afd39596c9d37aaa83da139f3e","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yingx9/YingXia-AboutUs","messageBody":"Update AboutUs.md and add Portfolio Page","fileTypesAndContributionMap":{}},{"hash":"ce04bd2fd92aa288fc50505baa20550cef504563","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AY2324S1-CS2113T-W11-1/branch-AshokBalaji-userguide","messageBody":"Add userguide draft","fileTypesAndContributionMap":{}},{"hash":"bd25c10208589cf71225db3fa2e85eb80cf14e72","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WuXingyu-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2eb93ed11019095c9d83522d710cff1951ff90ee","isMergeCommit":true,"messageTitle":"Merge pull request #3 from DavinciDelta/WuXingyu-AboutUs","messageBody":"Add WuXingyu-AboutUs","fileTypesAndContributionMap":{}},{"hash":"da93b03bf043240cb13cd891d3f7d5ba034f221d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-AshokBalaji-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"751016df50864854566f9a6f330cc416719f3f8c","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AY2324S1-CS2113T-W11-1/branch-AshokBalaji-AboutUs","messageBody":"Add ashokbalaji-aboutus","fileTypesAndContributionMap":{}},{"hash":"fbcd9e994f8f6d371570e0837d0b9df5d55e0a65","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6e0c5086aa5ce4c4ef524b1109975395f85b10ec","isMergeCommit":true,"messageTitle":"Merge pull request #6 from bnjm2000/master","messageBody":"Add Benjamin-AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"7ac4de161937c8f68caedf661d33ac2743bce93f","isMergeCommit":false,"messageTitle":"Revert \"Add code from AddressBook\"","messageBody":"This reverts commit 24a54a13e9bff5754c97196f670acb1db3f9c3fe.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1937}}},{"hash":"15df575857850f9910d1277c039fd733830fde91","isMergeCommit":false,"messageTitle":"Add UI Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":61,"deletions":11}}},{"hash":"9598cd960fd0593f0decb94a2ad3150e18b70383","isMergeCommit":false,"messageTitle":"Update UI package","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":12}}},{"hash":"cbd5935ccf882033ad0b08db364596550f560f60","isMergeCommit":false,"messageTitle":"Rename Ui.java to UI.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"dbd0e6f0e289653a11048a5d9c19c7a444448864","isMergeCommit":false,"messageTitle":"Update UI package bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":11}}},{"hash":"9a1adb0d5f9728d7fd6ddf0eb857fe41242adf24","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-AshokBalaji-UI-class\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into branch-AshokBalaji-UI-class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"61cfb3cce6305613102703e161b14a648269c2a3","isMergeCommit":false,"messageTitle":"Update UI package bug","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":0}}},{"hash":"7e4f3fe7f71a7459f1bd36c678648852307f3437","isMergeCommit":false,"messageTitle":"Update tests and fix package structure","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":14},"other":{"insertions":22,"deletions":22}}},{"hash":"234d4f7e45be31af96739a72dbc38e756ac6e307","isMergeCommit":true,"messageTitle":"Merge pull request #22 from AY2324S1-CS2113T-W11-1/branch-AshokBalaji-UI-class","messageBody":"Add UI Class","fileTypesAndContributionMap":{}},{"hash":"11762124503a2c817f64b4270a43e8aacf3f413d","isMergeCommit":true,"messageTitle":"Merge pull request #23 from bnjm2000/add_portfolio","messageBody":"Add portfolio and updated README.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"53cf6f5c45786d68a96b75e355f9b23f4e85d942","isMergeCommit":false,"messageTitle":"Add FindCommand class","messageBody":"Refactored structure as well\n","fileTypesAndContributionMap":{"functional-code":{"insertions":107,"deletions":7},"other":{"insertions":3,"deletions":4}}},{"hash":"e47758599f53faae99cd80ef54ce1645c93bd29e","isMergeCommit":true,"messageTitle":"Merge pull request #33 from JoanneJo/JoanneAng-TagResource","messageBody":"Add Tag Function","fileTypesAndContributionMap":{}},{"hash":"8bfd4312374db9102e7007cac4eb3d716c3533b4","isMergeCommit":true,"messageTitle":"Merge pull request #34 from yingx9/YingXia-ListBySpecificArguments","messageBody":"Update Listing by specific filters for ListCommand.Java","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"c506bdc66a04030dcab18d1d8558dfe23fec32c2","isMergeCommit":false,"messageTitle":"Add Junit tests for FindCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":19},"test-code":{"insertions":126,"deletions":1}}},{"hash":"ecdbae3f3a74ddc3de8d01da6cc64fe1a557ff7b","isMergeCommit":false,"messageTitle":"Add logging and java assertions to FindCommand class, updated FindCommandTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":3},"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-26","commitResults":[{"hash":"0643b459f813d1557ce46b3d1f313e42921a2afe","isMergeCommit":false,"messageTitle":"Update FindCommand with new parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":29},"test-code":{"insertions":0,"deletions":11}}},{"hash":"f2321f49afd6722491ed22ce65cf805c4856bf35","isMergeCommit":true,"messageTitle":"Merge pull request #72 from 000verflow/branch-AshokBalaji-UpdateFindCommand","messageBody":"Update FindCommand with new parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"3669b239dc0f2e56b1ac7d0fec9418ab1ef9e5bd","isMergeCommit":false,"messageTitle":"Add find command details on DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":69,"deletions":4}}}]},{"date":"2023-10-29","commitResults":[{"hash":"66de33dd0fc52c63e97efd45452feb410fad335e","isMergeCommit":true,"messageTitle":"Merge pull request #84 from bnjm2000/BenjaminNg-UpdateUG","messageBody":"Add updates to UG","fileTypesAndContributionMap":{}}]}],"bnjm2000":[{"date":"2023-10-09","commitResults":[{"hash":"efad7d965c627a182d0c515fbcf8bd652d5f7b75","isMergeCommit":false,"messageTitle":"Add Benjamin-AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-11","commitResults":[{"hash":"11fbaf7ff4a1c16bd6e857e1bfd19094d43fbfb9","isMergeCommit":false,"messageTitle":"Add portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":0}}},{"hash":"f98ad3ecdb9bf4a008479b664430633fe6aee154","isMergeCommit":false,"messageTitle":"Fix portfolio link","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-14","commitResults":[{"hash":"ff6ecc4e701b239a826fcd503989cca981a38809","isMergeCommit":false,"messageTitle":"Add portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":9}}},{"hash":"c5bb57406ed0171f9b20242b11d01e4955ec7839","isMergeCommit":true,"messageTitle":"Merge pull request #25 from AY2324S1-CS2113T-W11-1/WuXingyu-Resource","messageBody":"Add Resource class","fileTypesAndContributionMap":{}},{"hash":"fee0f659873ca0be326386c791db3e379df73714","isMergeCommit":false,"messageTitle":"Add HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1}}},{"hash":"a01128ec5feae99924bb3c327d94bba7e5d9a31d","isMergeCommit":false,"messageTitle":"Fix ExitCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":3}}},{"hash":"243fa1457017b73e4edbd1929fadadd779e2de01","isMergeCommit":false,"messageTitle":"Changed unknown command message.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"3806b18ebb2a19a8bb7a2012027cda0f2f705459","isMergeCommit":false,"messageTitle":"Moved help message to UI class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":8}}},{"hash":"4f172b206ce42c544432438b8384906a12d5dc98","isMergeCommit":true,"messageTitle":"Merge pull request #29 from yingx9/YingXia-UpdateListCommand","messageBody":"Update ListCommand and edit Resource and Book","fileTypesAndContributionMap":{}},{"hash":"8d3ec47b216a8ecce72971e1286cd5c7816e3e0d","isMergeCommit":false,"messageTitle":"Changed syntax to \"exit\" and updated test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-15","commitResults":[{"hash":"41e96d180eea8819810b89f4972503658bc58533","isMergeCommit":true,"messageTitle":"Merge pull request #31 from JoanneJo/JoanneAng-AddCommand","messageBody":"Update AddCommand.java and Add SysLibException.java","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"7ff86171a0fd13c77b3cf121db7fe6884d0b3d86","isMergeCommit":false,"messageTitle":"Add Junit testing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":183,"deletions":0}}},{"hash":"b567bf5aa32fe02c4fd1dfb89a7015f775c830c5","isMergeCommit":false,"messageTitle":"Add more Junit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":75,"deletions":2}}},{"hash":"307dadb3f1cadb6f4656b5a341d45ea46c7e249a","isMergeCommit":false,"messageTitle":"Fix checkstye","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":26,"deletions":17}}},{"hash":"86cf0bf0f325391532da1bcc682d06a7ad6362d6","isMergeCommit":false,"messageTitle":"Fix checks not working on Windows","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":35,"deletions":33}}},{"hash":"d6f62f5ccc65e022901ad84f3267897d80378000","isMergeCommit":true,"messageTitle":"Merge pull request #39 from yingx9/YingXia-UpdateUserGuide","messageBody":"Update UserGuide.md for List and minor change to ListCommand","fileTypesAndContributionMap":{}},{"hash":"bae7e026d74680fe4a0047fa954ce271f2bffaba","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into add_Junit","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Update UserGuide.md for List and minor change to ListCommand\n","fileTypesAndContributionMap":{}},{"hash":"3e910fc9d53b77f127940bc75640b25da44f6808","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":13,"deletions":13}}},{"hash":"db5883414825e7a5e441ce1878551dd7d555d7d2","isMergeCommit":false,"messageTitle":"Fix comment indentation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":11,"deletions":11}}},{"hash":"83d05e7e51521c14924622be0f8d0597145b6eb5","isMergeCommit":false,"messageTitle":"Fix Try #1","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":11,"deletions":11}}},{"hash":"a81d766d11a375879c1f602842828531a8604d25","isMergeCommit":false,"messageTitle":"Add TestUtil and corrected Junit","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":40,"deletions":3}}},{"hash":"48875226e1bf55b48404da72ad34eab3eec785d4","isMergeCommit":true,"messageTitle":"Merge pull request #40 from yingx9/YingXia-UpdateListPrinting","messageBody":"Update ListCommand to use lineSeparator() and add more checks","fileTypesAndContributionMap":{}},{"hash":"affd9379953ddff889923ab527eedcb8736d6536","isMergeCommit":false,"messageTitle":"Fix Checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":6}}},{"hash":"08a718177bfc3197280e2e6a5f1b74c34478186e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into add_Junit","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Fix lines to not exceed 120 characters for coding standard\n Update ListCommand to use lineSeparator() and add more checks\n","fileTypesAndContributionMap":{}},{"hash":"dda3ca33533312deceb333e38d5eb526948abdb1","isMergeCommit":false,"messageTitle":"Fix windows error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":2}}},{"hash":"e47ca19cf52aedb1ee571f7ae8ac7cae8fe4717d","isMergeCommit":false,"messageTitle":"Fix Windows error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"04906e63ebf2b3be29a4f8cd076683ee9d5777f6","isMergeCommit":false,"messageTitle":"Fix windows error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"test-code":{"insertions":1,"deletions":1}}},{"hash":"09ad6907d3798658b4b35994f88bd432abb995b9","isMergeCommit":false,"messageTitle":"Fix failed test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"a378b1122c47e5682c500f7615e125ef6e580665","isMergeCommit":false,"messageTitle":"Fix code to have better consistency","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":20},"test-code":{"insertions":30,"deletions":16}}},{"hash":"4586311a7acee699ecf66d65ab4402c569af92f3","isMergeCommit":true,"messageTitle":"Merge pull request #41 from yingx9/YingXia-AddListCommandTest","messageBody":"Add jUnit tests for ListCommand","fileTypesAndContributionMap":{}},{"hash":"0d98a06f824e5fa388728e538a12933f4cb95efb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into BenjaminNg_consistency","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Update EXPECTED.TXT and input.txt for testing\n Fix windows error\n Fix check style error\n Add jUnit tests for ListCommand\n","fileTypesAndContributionMap":{}},{"hash":"816feeda7fb4686d2872e332338372a28eb35064","isMergeCommit":false,"messageTitle":"Fix checks after merge","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3},"test-code":{"insertions":21,"deletions":5}}},{"hash":"2d31c5b83d50f5c0c1cca48f588661ac6a44e6d0","isMergeCommit":false,"messageTitle":"Fix failed test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"1171880f0dfcbe51c57f3c8c2ed253170606ea19","isMergeCommit":false,"messageTitle":"Fix failed checks","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-17","commitResults":[{"hash":"97bad5aea57f5f451ee8ca636e72807e15defeb3","isMergeCommit":false,"messageTitle":"Fix helpCommand to be consistent with UG","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":5},"docs":{"insertions":1,"deletions":1},"test-code":{"insertions":19,"deletions":13}}},{"hash":"969c6d2ed053ae8345ad0b5367f9ff113879b550","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp into BenjaminNg_FixHelpCommand","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113T-W11-1/tp:\n Fix failed checks\n Fix failed test\n Fix checks after merge\n Fix code to have better consistency\n\n# Conflicts:\n#\tsrc/main/java/seedu/ui/UI.java\n#\tsrc/test/java/seedu/commands/HelpCommandTest.java\n#\tsrc/test/java/seedu/parser/ParserTest.java\n#\ttext-ui-test/EXPECTED.TXT\n","fileTypesAndContributionMap":{}},{"hash":"7f270f77a3b68d595ddb92c68f1aa96dc0e3c1f8","isMergeCommit":false,"messageTitle":"Fix merge conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":10},"test-code":{"insertions":0,"deletions":24}}},{"hash":"b44806541a1a31074bc32d9a7f54bc3b3daa2ff1","isMergeCommit":true,"messageTitle":"Merge pull request #45 from yingx9/YingXia-FixNullGenreBug","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"256dfd39999328567020cbfe6bbcff0b4730de0b","isMergeCommit":true,"messageTitle":"Merge pull request #46 from yingx9/YingXia-UpdateListGenre","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"effcd9da28de13988cba3b1caab69dd2f2e5b1bd","isMergeCommit":true,"messageTitle":"Merge pull request #51 from yingx9/YingXia-AddListCommandAssertion","messageBody":"Add assertion to ensure ListCommand works as intended","fileTypesAndContributionMap":{}},{"hash":"1e6825dff3c2f6d0aae77ec5048dac06227f015e","isMergeCommit":true,"messageTitle":"Merge pull request #53 from 000verflow/Add-Assertions-Logging-FindCommand","messageBody":"Add logging and java assertions to FindCommand class","fileTypesAndContributionMap":{}},{"hash":"3733b72dc6d2b395228ddd7a872b80f5686f534c","isMergeCommit":false,"messageTitle":"Add assert and logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":64,"deletions":4}}}]},{"date":"2023-10-26","commitResults":[{"hash":"5016c2e6074261fc5964ddfff0f7eb27d96cd571","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":56,"deletions":12}}},{"hash":"fe18b54784d8ad6cefddd54f43b9dfc4d95e44bd","isMergeCommit":false,"messageTitle":"Add help and bye manual testing","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":1}}},{"hash":"226408b08990865f86550c15a9c1128e24490679","isMergeCommit":true,"messageTitle":"Merge pull request #75 from yingx9/YingXia-UpdateListDG","messageBody":"Update ListCommand and List Implementation of DG","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"14d7e50a5215ff6e3dfed92188ced624a631017c","isMergeCommit":false,"messageTitle":"Add updates to UG","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":96,"deletions":27}}},{"hash":"85830a26ef52ffe6b1b646cdad9d13b8fc6da1d5","isMergeCommit":false,"messageTitle":"Add update to UG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}}]}],"JoanneJo":[{"date":"2023-10-04","commitResults":[{"hash":"d4b23856f14360e5e02b8b48f1fa8d867104aa99","isMergeCommit":false,"messageTitle":"Add personal details to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-05","commitResults":[{"hash":"74ce9366bfeba2e78b22b08db06017a574898712","isMergeCommit":false,"messageTitle":"Update AboutUs.md and Add JoanneAng.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-15","commitResults":[{"hash":"6642630870c3a7e6899d35768f20336136f8ba75","isMergeCommit":false,"messageTitle":"Update AddCommand.java and Add SysLibException.java","messageBody":"Updated UserGuide.md so that all commands are\nusing the same tags for the same type of data.\nUI.java is therefore edited to standardize the\nhelp message.\n\nModified Book.java to remove synopsis from the\nobject and add genres. toString() is modified to\ndisplay genres.\n\nImplemented the add command to add books to the\nresource list. Validated user input for add command.\n\nChanged the naming of taskList to resourceList and\nadded SysLibException.java. Hence, edited\nCommand.java, DeleteCommand.java, ListCommand.java,\nand Parser.java.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":102,"deletions":39},"docs":{"insertions":33,"deletions":26}}},{"hash":"97f427ecac516acd184a6a24eb9aa5a62c8bd731","isMergeCommit":false,"messageTitle":"Update Book.java, AddCommand.java, and Parser.java","messageBody":"Updated to pass the checks.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":9}}},{"hash":"a6eb7919209e44ae45ed5fdab02d2447a377ddcd","isMergeCommit":false,"messageTitle":"Add Tag Function","messageBody":"Added tag function to identify and specify the\ntype of resources added.\n\nModified parseAddCommand method to be more generic.\nAdded parsing and validation methods for adding\nbooks.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":105,"deletions":59},"docs":{"insertions":2,"deletions":2}}},{"hash":"eb76d7512bd86add4df324bc90fb72ccb28a838c","isMergeCommit":false,"messageTitle":"Update AddCommand.java and Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":6}}},{"hash":"0d7af8aebc811a4ff9b851c0e322996edf43dc96","isMergeCommit":false,"messageTitle":"Update UserGuide.md and Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-16","commitResults":[{"hash":"834fcdd733a92644b85cc8a507de7bbfd736d321","isMergeCommit":true,"messageTitle":"Merge pull request #35 from DavinciDelta/WuXingyu-DeleteCommand","messageBody":"Add Delete Command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"38a8d4706b95c1b71e8ed427ef64e64b0448d972","isMergeCommit":true,"messageTitle":"Merge pull request #49 from 000verflow/Add-FindCommandTest","messageBody":"Add Junit tests for FindCommand","fileTypesAndContributionMap":{}},{"hash":"3dc4400af9db7c3713fa071647fb9d32baf5181d","isMergeCommit":true,"messageTitle":"Merge pull request #50 from DavinciDelta/WuXingyu-DeleteTesting","messageBody":"Add DeleteCommand Testing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"dd157775f08701fc6a2945c72d7ddd4eccb29665","isMergeCommit":true,"messageTitle":"Merge pull request #55 from yingx9/YingXia-UpdateListCommandParsing","messageBody":"Update logic and code quality of ListCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"ed7a3cc3a2b98b526a8b2901e6eac90a58555271","isMergeCommit":false,"messageTitle":"Add AddCommand JUnit Tests","messageBody":"Added addCommand JUnit tests to AddCommandTest.java.\nUpdated Book.java and Parser.java.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0},"test-code":{"insertions":58,"deletions":0}}},{"hash":"2c2e658a363c148a823aa30b74af030c1015aace","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":3}}}]},{"date":"2023-10-26","commitResults":[{"hash":"68271b08f8aa57213e668aef11dd07b64b33fb19","isMergeCommit":true,"messageTitle":"Merge pull request #71 from yingx9/YingXia-DGPlantUml","messageBody":"Repurpose style, architecture.puml from Addressbook","fileTypesAndContributionMap":{}},{"hash":"c83c8d24dbe24a1d92dfa2a5cc07c32ce8ea3e53","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"Added on to the developer guide and included parts\nfor the add feature.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5},"docs":{"insertions":172,"deletions":3}}}]}],"DavinciDelta":[{"date":"2023-10-05","commitResults":[{"hash":"20d84b8a2deaed74e86d4c49ff90766db2fd1d7d","isMergeCommit":false,"messageTitle":"Add AboutUs","messageBody":"Included my own about us\n","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}}]},{"date":"2023-10-13","commitResults":[{"hash":"f816d329501fbc059fac7bc29b8449c0aa6d39ff","isMergeCommit":false,"messageTitle":"Basic abstract Command","messageBody":"Included the basic abstract command for reference, with delete code implemented\n","fileTypesAndContributionMap":{"functional-code":{"insertions":117,"deletions":0}}},{"hash":"c97d2cec899d51e82fa979133c029d496a59bb91","isMergeCommit":false,"messageTitle":"Revert \"Basic abstract Command\"","messageBody":"This reverts commit f816d329501fbc059fac7bc29b8449c0aa6d39ff.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":117}}}]},{"date":"2023-10-14","commitResults":[{"hash":"66cb8f164903cc7b8dd1c4e2f37449f49b783a53","isMergeCommit":true,"messageTitle":"Merge pull request #19 from yingx9/WuXingYu-BasicStructure","messageBody":"Add XingYu\u0027s Command and Parser from iP project","fileTypesAndContributionMap":{}},{"hash":"fae2e8bde57a2bcdca664f910751520047b3cb86","isMergeCommit":false,"messageTitle":"Add resource","messageBody":"Include resource class with book class.\n\nInclude basic add and list commands for testing\n","fileTypesAndContributionMap":{"functional-code":{"insertions":115,"deletions":3}}},{"hash":"d168a5972836ae6563d2c2ff0f4dc4500e17bfb8","isMergeCommit":true,"messageTitle":"Merge from master","messageBody":"Include changes from master\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"18ae4568148b6a244a6954b2d645a6396383d92e","isMergeCommit":false,"messageTitle":"Add Delete Command","messageBody":"Added the delete command with it\u0027s parser\n","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":8}}}]},{"date":"2023-10-17","commitResults":[{"hash":"4b21bf920d2abd9b8d5ca763b6cb16a40a87e5ff","isMergeCommit":false,"messageTitle":"Add general validate and parse function","messageBody":"Include a validate and parse function that can be used for all command to decrease complexity of code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":3}}},{"hash":"460604675bb122c09dd57d41481aad943423a7d2","isMergeCommit":false,"messageTitle":"Remove print statements","messageBody":"Remove debugging print statements\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"9c24aadd4353ff76d44e33afc61d3d758704f474","isMergeCommit":false,"messageTitle":"Update Command","messageBody":"Remove redundant code and improve style\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"4d4e242a5a8b83bfae05457a81c2ae027d999c3b","isMergeCommit":false,"messageTitle":"Add DeleteCommand Testing","messageBody":"Included J unit testing for DeleteComand\n","fileTypesAndContributionMap":{"test-code":{"insertions":46,"deletions":0}}},{"hash":"862395cfe14800213003b307dcf087084245681f","isMergeCommit":false,"messageTitle":"Update DeleteCommandTest.java","messageBody":"Updated DeleteCommandTest\n","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":17}}},{"hash":"92e2f73b5371af344b6816b12e4013c4800300e6","isMergeCommit":false,"messageTitle":"Remove redundant imports","messageBody":"Removed redundant imports to improve clarity\n","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":2}}},{"hash":"360606f9d100648710f69f6c9b8ed59e9da91041","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WuXingyu-ParsingAbstraction","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"dae3e42c416444c4b6515a99bdb72c4b35e06356","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WuXingyu-ParsingAbstraction","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29d5789812c41805fbd1bab9a073d8baa2881793","isMergeCommit":false,"messageTitle":"Update validate and parsing","messageBody":"Update parsing into abstract Command class\n","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":27}}},{"hash":"7b07b79090bec34138f9cd269e9a17594cd4994c","isMergeCommit":false,"messageTitle":"Update style","messageBody":"Remove redundant imports\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"e2f835aeff05274f1bc1177563fd2ab439494762","isMergeCommit":false,"messageTitle":"Update AddCommand","messageBody":"Changed AddCommand isbn to i\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"bd37b380149d2f2f85f500c4d6da73dbe40e3fc3","isMergeCommit":false,"messageTitle":"Update genre","messageBody":"Change genre for add command\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2240d9c6cdeaa91c620056f02f8f3af007701523","isMergeCommit":false,"messageTitle":"Improve validation","messageBody":"Included more validation checks for duplicate arguments\n\nAllow for aliasing for arguments\n","fileTypesAndContributionMap":{"functional-code":{"insertions":62,"deletions":15}}},{"hash":"da37d39f6e07a7a4d0171c5109158a737e7e91b0","isMergeCommit":false,"messageTitle":"Fix validator","messageBody":"Prevent clash of metacharacters in strings and capital letters with validator\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-23","commitResults":[{"hash":"9ca77c1f5398f3ee3e36892e95d939757a18b035","isMergeCommit":true,"messageTitle":"Merge pull request #65 from JoanneJo/JoanneAng-AddCommandJUnit","messageBody":"Add AddCommand JUnit Tests","fileTypesAndContributionMap":{}}]},{"date":"2023-10-24","commitResults":[{"hash":"f1c67d44a0c3306c28b454edfa5cc578ae3b17d9","isMergeCommit":true,"messageTitle":"Merge pull request #66 from yingx9/YingXia-EnableAssertion","messageBody":"Enable assertions in Gradle","fileTypesAndContributionMap":{}},{"hash":"fcbdbe6b9e56b76f011dd1383e5ebf1fd8d11eb6","isMergeCommit":false,"messageTitle":"Include assertion in DeleteCommand","messageBody":"Include a generic assertion for deleteCommand\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"c90927f278161ceb6bd90171ff4431ab5a81ddb7","isMergeCommit":true,"messageTitle":"Merge branch \u0027AddAssertion\u0027 into UpdateDeveloperGuide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"85745dae00595ea292ea6bbc4b30c74c43f49ba0","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"Update the developer guide with the basic information\n","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":6}}}]}],"yingx9":[{"date":"2023-10-04","commitResults":[{"hash":"d2a39c983b779d162587aa54cdcc043d19acb42b","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2023-10-05","commitResults":[{"hash":"b1a23ae973590faec4fa49548e661798cddc354c","isMergeCommit":false,"messageTitle":"Update AboutUs.md and add Portfolio Page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}}]},{"date":"2023-10-11","commitResults":[{"hash":"34113bf6369cf3e72c81bad632b546565825c15e","isMergeCommit":true,"messageTitle":"Merge pull request #1 from JoanneJo/JoanneAng-AboutUs","messageBody":"Add personal details to AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"24a54a13e9bff5754c97196f670acb1db3f9c3fe","isMergeCommit":false,"messageTitle":"Add code from AddressBook","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1937,"deletions":0}}},{"hash":"4c73795256c18d337edb3cd0d8fd6e5e95854417","isMergeCommit":true,"messageTitle":"Merge pull request #16 from yingx9/YingXia-AddressBook","messageBody":"Add code from AddressBook","fileTypesAndContributionMap":{}},{"hash":"8fdb83fc66cf61cec1707849a12140f63547934c","isMergeCommit":false,"messageTitle":"Add XingYu\u0027s Command and Parser from iP project","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":125,"deletions":0}}},{"hash":"bffe4d35fbfddbd14885722e201bf230cd6a9453","isMergeCommit":false,"messageTitle":"Update ListCommand and edit Resource and Book","messageBody":"As Resource is a generic class, Book can inherit and override\ntoString to print its own specific details\n\nHence,\nResource.java: Add toString method to be overridden by Book\nBook.java: Override parent toString method\n","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":5},"docs":{"insertions":1,"deletions":1}}},{"hash":"6dcad7eeea645efabb2c7991d22053542764e697","isMergeCommit":true,"messageTitle":"Merge pull request #27 from bnjm2000/add_HelpCommand","messageBody":"Add HelpCommand","fileTypesAndContributionMap":{}},{"hash":"8ebfcaf95769d42cdf6ff8effed30582b2abbf09","isMergeCommit":true,"messageTitle":"Merge pull request #28 from bnjm2000/add_ExitCommand","messageBody":"Add ExitCommand","fileTypesAndContributionMap":{}},{"hash":"8336568d113cb4e16f4c7936c6d8254bc5d4ec2f","isMergeCommit":true,"messageTitle":"Merge pull request #30 from bnjm2000/add_ExitCommand","messageBody":"Change syntax to \"exit\" and updated test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"8365f041ce1578f5258123ae6f612456b752747f","isMergeCommit":true,"messageTitle":"Merge pull request #32 from 000verflow/Add-FindCommand","messageBody":"Add FindCommand class","fileTypesAndContributionMap":{}},{"hash":"e961ad179fefc5fe022232e8efaf73bbb1065a45","isMergeCommit":false,"messageTitle":"Update Listing by specific filters for ListCommand.Java","messageBody":"Librarians may want an overview of resources by categories such\nas tag and genre\n\nHence, add filter methods to ListCommand to filter by Tag, Genre,\nor Both\n","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":8}}}]},{"date":"2023-10-16","commitResults":[{"hash":"ce80c867361f341512178783328995160bb24ca5","isMergeCommit":false,"messageTitle":"Update UserGuide.md for List and minor change to ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4},"docs":{"insertions":11,"deletions":8}}},{"hash":"8c30d1ef8dbba12f7d7807c9c6c3809726b2e1d4","isMergeCommit":false,"messageTitle":"Update ListCommand to use lineSeparator() and add more checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":11}}},{"hash":"ed23a422c3bc47ee6e56abb377be77f13c27e4bc","isMergeCommit":false,"messageTitle":"Fix lines to not exceed 120 characters for coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"69362cc4634c29603bcee3690e6ac5cf11f530c8","isMergeCommit":true,"messageTitle":"Merge pull request #38 from bnjm2000/add_Junit","messageBody":"Add Junit","fileTypesAndContributionMap":{}},{"hash":"4e21bd1fc5c7dcf2ef84b90dd6e05e481e5b48f3","isMergeCommit":false,"messageTitle":"Add jUnit tests for ListCommand","messageBody":"To ensure ListCommand is works as intended, add tests such as:\n1. Ensure list does not crash SysLib if executed when there are no\nresources\n2. Ensure missing values for tag and genre filter throws exception\n3. Ensure listing with filters does not crash SysLib if there are\nno found resources matching filters\n","fileTypesAndContributionMap":{"test-code":{"insertions":101,"deletions":0}}},{"hash":"b62afec7114450326fdb9237456383a9845f62dd","isMergeCommit":false,"messageTitle":"Fix check style error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":13}}},{"hash":"871ae927c0777d5e302d720cf8a377459bac1304","isMergeCommit":false,"messageTitle":"Fix windows error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"446c9c1b9d6b76ce5b9b366d67eba021b3075894","isMergeCommit":true,"messageTitle":"Merge pull request #42 from bnjm2000/BenjaminNg_consistency","messageBody":"Fix consistency","fileTypesAndContributionMap":{}},{"hash":"61bca2d384d09bf9fce54fd2e5a13fa913fb028b","isMergeCommit":false,"messageTitle":"Fix bug where listing by genre crashes SysLib","messageBody":"When a book is added without a genre, SysLib crashes when listing\nby genre\n\nHence add a check to hasGenre method to return false when a book has\nno genre\n\nNote in future developments, if createBook changes its method of\ncreating genres array, this fix has to be updated\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0},"test-code":{"insertions":4,"deletions":1}}},{"hash":"8efd8319a62d5e716070bf29aadaa27690a176de","isMergeCommit":true,"messageTitle":"Merge pull request #44 from bnjm2000/BenjaminNg_FixHelpCommand","messageBody":"Fix HelpCommand","fileTypesAndContributionMap":{}},{"hash":"94f1c1b220672138c830e6ab79721ce84c1eb3da","isMergeCommit":false,"messageTitle":"Fix bug where multiple genres causes list filter to not work","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":7}}},{"hash":"7277e0d587c97e762d22c5a1e829b859b648b9b8","isMergeCommit":false,"messageTitle":"Update method of checking genre again for ListCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":4}}},{"hash":"ea49ab338b61b8cf5cdb56c7e4b3679a1b1a91b7","isMergeCommit":false,"messageTitle":"Add assertion to ensure ListCommand works as intended","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"5eb00e5f0f4e350a35924a1cb0fe5faa6d6201e6","isMergeCommit":true,"messageTitle":"Merge pull request #54 from bnjm2000/BenjaminNg_addAssertandLogging","messageBody":"Add assert and logging for HelpCommand and ExitCommand","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"d25c9b66e18042f05cf523e9875bdd7eba9be49d","isMergeCommit":true,"messageTitle":"Merge pull request #47 from DavinciDelta/WuXingyu-ParsingAbstraction","messageBody":"Add general validate and parse function","fileTypesAndContributionMap":{}},{"hash":"8e0d91820deea617c37ecaf1dfc69fefade72c9a","isMergeCommit":false,"messageTitle":"Update logic and code quality of ListCommand","messageBody":"There are also many repeats of System.lineSeparator + \"------\" etc\n\nHence update constant LINEDIVIDER in UI class to be public, and add\nSEPARATOR_LINEDIVIDER constant for use to tidy up code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":107,"deletions":129},"test-code":{"insertions":14,"deletions":13}}}]},{"date":"2023-10-23","commitResults":[{"hash":"8507b3cd0107300ca6e7645b7ea6b0d311e5b9d2","isMergeCommit":false,"messageTitle":"Enable assertions in Gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-24","commitResults":[{"hash":"41ef8d4d05c823217fd470fd2b0d5ce75cc9b755","isMergeCommit":true,"messageTitle":"Merge pull request #68 from DavinciDelta/AddAssertion","messageBody":"Include assertion in DeleteCommand","fileTypesAndContributionMap":{}},{"hash":"b36525d5ee13cdc1f2ef8fb4a9472930658ca9b1","isMergeCommit":true,"messageTitle":"Merge pull request #69 from DavinciDelta/UpdateDeveloperGuide","messageBody":"Update developer guide","fileTypesAndContributionMap":{}},{"hash":"7b8ffa67e21258e44d6123138f6526cf6ec70478","isMergeCommit":false,"messageTitle":"Repurpose style, architecture.puml from Addressbook","messageBody":"Add a draft architecture diagram\n","fileTypesAndContributionMap":{"docs":{"insertions":110,"deletions":0}}}]},{"date":"2023-10-25","commitResults":[{"hash":"0aea8979e3591fdba501ce8032615bd126a1555c","isMergeCommit":false,"messageTitle":"Add more structure to the Developer\u0027s Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":0}}},{"hash":"b83bc4d4d00080b7f0ce0afc2896a051e7171889","isMergeCommit":false,"messageTitle":"Add Sequence Diagram for ListCommand","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":84,"deletions":0}}}]},{"date":"2023-10-26","commitResults":[{"hash":"f09c1bf2895d25e06455027821024ce74864ead9","isMergeCommit":true,"messageTitle":"Merge pull request #74 from JoanneJo/JoanneAng-DeveloperGuide","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"474936b9006df0c0a61054b29262af71487c4ffa","isMergeCommit":false,"messageTitle":"Update ListCommand and List Implementation of DG","messageBody":"Add a Messages class to format messages with frequently used\nline separators and dividers\n\nMove hasGenre to Resources class so it can be used for other purpose\n\nUpdate more details about ListCommand to DG\n","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":75},"docs":{"insertions":16,"deletions":6},"test-code":{"insertions":10,"deletions":11}}},{"hash":"59cae2daeb0fb11a82e05710e3f9f504f5748974","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"73265af04a474da052dbbe9cdda0066e4c0cf1a0","isMergeCommit":false,"messageTitle":"Fix ListCommandTest checkstyle error","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":1}}},{"hash":"10159022ea4dc325910969bd62ba81407ec235cf","isMergeCommit":false,"messageTitle":"Update List DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":5}}},{"hash":"2d5ffa410ef7ee5a7a7dd822881d60585ac03a1e","isMergeCommit":true,"messageTitle":"Merge pull request #76 from bnjm2000/BenjaminNg-DG-Manual-Testing","messageBody":"Add more user stories as well as manual testing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"e1ef61a3c639ad009ebfada3524d13be611ffb01","isMergeCommit":true,"messageTitle":"Merge pull request #77 from 000verflow/update-developer-guide","messageBody":"Add find command details on DG","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"000verflow":{"docs":133,"functional-code":197,"test-code":116},"bnjm2000":{"docs":180,"functional-code":105,"test-code":316},"JoanneJo":{"docs":187,"functional-code":151,"test-code":58},"DavinciDelta":{"docs":14,"functional-code":214,"test-code":31},"yingx9":{"docs":253,"functional-code":266,"test-code":96,"other":1}},"authorContributionVariance":{"000verflow":115403.09,"bnjm2000":12310.768,"JoanneJo":5249.639,"DavinciDelta":2438.4824,"yingx9":113608.96},"authorDisplayNameMap":{"000verflow":"CS2113T-W11-1 VELU..LAJI","bnjm2000":"CS2113T-W11-1 BENJ..MING","JoanneJo":"CS2113T-W11-1 JOAN..LING","DavinciDelta":"CS2113T-W11-1 WU X..NGYU","yingx9":"CS2113T-W11-1 LOKE.. XIA"}} diff --git a/AY2324S1-CS2113T-W11-2_tp_master/authorship.json b/AY2324S1-CS2113T-W11-2_tp_master/authorship.json index 872b93f..20fde25 100644 --- a/AY2324S1-CS2113T-W11-2_tp_master/authorship.json +++ b/AY2324S1-CS2113T-W11-2_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":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"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":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"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":11,"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":12,"author":{"gitId":"woodenclock"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/wildwatch/WildWatch.java` file, right-click it, and choose `Run WildWatch.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" Hello there! Welcome to Wild Watch!","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"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":27,"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":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"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":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"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":38,"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":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"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":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"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":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"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":55,"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":56,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"woodenclock":3,"-":56}},{"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":"woodenclock"},"content":" mainClass.set(\"seedu.wildwatch.WildWatch\")","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":"woodenclock"},"content":" archiveBaseName.set(\"wildwatch\")","lastModifiedDate":"2023-10-09"},{"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":"woodenclock"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"woodenclock":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":"woodenclock"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"|-----------------------------------------------------------------------------------------|:-----------:|:----------------------------------------:|:------------------------------------:|","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"| ![](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/252865bb-811e-48b1-9777-6c01b98500b1) | Lee Sungmin | [Github](https://github.com/woodenclock) | [Portfolio](https://github.com/AY2324S1-CS2113T-W11-2/tp/blob/master/docs/team/leesungmin.md#lee-sungmin) |","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"woodenclock":6,"-":2}},{"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":"woodenclock"},"content":"- [Acknowledgements](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"- [Design \u0026 Implementation](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#design--implementation)","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"- [Product Scope](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#product-scope)","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" - [Target User Profile](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#target-user-profile)","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" - [Value Proposition](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#value-proposition)","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"- [User Story](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#user-stories)","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"- [Non-Funtional Requirements](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#non-functional-requirements)","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"- [Glossary](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#glossary)","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"- [Manual Testing](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#manual-testing)","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"- [Command Summary](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#command-summary)","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"Some code snippets were referenced from [here](https://github.com/woodenclock/ip.git).","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"## Design \u0026 Implementation","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"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":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":"WildWatch is a CLI based software that helps zoos keep track of animal inhabitants.","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":"Target user profile are the clerks working in zoos.","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"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":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":"|v1.0|new user|see help instructions|refer to them when I forget how to use the application|","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"|v1.0|zoo clerk|add an animal entry|record the animals in the zoo, and refer to them afterwards|","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":"|v1.0|zoo clerk|delete an animal entry|remove redundant or invalid animal entry|","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":"|v1.0|zoo clerk|list all the entries|see what entries I have entered previously, and refer to them|","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"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":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":"## Manual Testing","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":65,"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"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":"## Command Summary","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"woodenclock":36,"-":35}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# WildWatch","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"Wildwatch is a program for recording down individual wildlife in a wildlife reserve via a Command Line Interface (CLI).","lastModifiedDate":"2023-10-21"},{"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":{"woodenclock":2,"-":6}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# WildWatch User Guide 🐘","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"Wildwatch is a program for a clerk managing animal entries in a wildlife reserve via the Command Line Interface (CLI).","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"## Table of Contents ","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"- [Quick Start](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#quick-start-)","lastModifiedDate":"2023-10-26"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"- [Features](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#features-)","lastModifiedDate":"2023-10-26"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" - [Adding Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#2-adding-entries-add): `add`","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" - [Deleting Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#3-deleting-entries-delete): `delete`","lastModifiedDate":"2023-10-27"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" - [Listing Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#4-listing-entries-list): `list`","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":" - [Getting Help](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#1-getting-help--help): `help` ","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"- [FAQ](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#faq)","lastModifiedDate":"2023-10-26"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"- [Command Reference](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#command-reference-)","lastModifiedDate":"2023-10-27"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"## Quick Start 🐵","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"1. Ensure you have Java 11 or above installed in your Computer. (What is my [Java version](https://www.java.com/en/download/help/version_manual.html)?)","lastModifiedDate":"2023-10-28"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"2. Download the latest `WildWatch.jar` from [here](https://github.com/AY2324S1-CS2113T-W11-2/tp/releases).","lastModifiedDate":"2023-10-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":"3. Copy the file to the folder you want to use as the home folder for your WildWatch.","lastModifiedDate":"2023-10-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":"4. Open a command terminal, `cd` into the folder you put the jar file in, and run the following command: `java -jar WildWatch.jar`.","lastModifiedDate":"2023-10-27"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":"You should see the welcome screen as follows.","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"5. Type commands below the horizontal line and press `Enter` to execute it. (e.g. typing `help` and pressing `Enter` will show the help page).","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":"Some example commands you can try:","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":"- `list` : Lists all entries. ","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":"- `bye` : Exits the program. ","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":"## Features 🦊","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"\u003e ❗ IMPORTANT","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":"\u003e * Capitalized words between angle brackets `\u003c \u003e` are information to be written appropriately by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":"\u003e * E.g., `delete \u003cINDEX\u003e` should be `delete 2`","lastModifiedDate":"2023-10-26"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"imaginarys96"},"content":"### 1. Adding Entries: `add`","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":"Adds a new entry to the system.","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":"Format: `add D/\u003cDATE\u003e S/\u003cSPECIES\u003e N/\u003cNAME\u003e R/\u003cREMARKS\u003e`","lastModifiedDate":"2023-10-26"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":"`\u003cdate\u003e` should be in the format **DD-MM-YY**","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":"Example: ","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":"add D/02-03-23 S/Annam Leaf Turtle N/Ariel R/Injured left flipper","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":"The following entry has been added:","lastModifiedDate":"2023-10-25"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":"Date: [02-03-2023] | Species: [Annam Leaf Turtle] | Name: [Ariel] | Remark: [Injured left flipper]","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"Now you have 1 entries in the list.","lastModifiedDate":"2023-10-25"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-25"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":"---","lastModifiedDate":"2023-10-25"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":70,"author":{"gitId":"imaginarys96"},"content":"### 2. Deleting Entries: `delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":"Deletes an entry. ","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":"Format: `delete INDEX`","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":"Deletes the entry at the specified INDEX. ","lastModifiedDate":"2023-10-25"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":"The index refers to the index number shown in the displayed entry list.","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"woodenclock"},"content":"\u003e ✏ Notes on `INDEX`","lastModifiedDate":"2023-10-25"},{"lineNumber":78,"author":{"gitId":"woodenclock"},"content":"\u003e * Index must be a positive integer 1, 2, 3, ...","lastModifiedDate":"2023-10-25"},{"lineNumber":79,"author":{"gitId":"woodenclock"},"content":"\u003e * Deleted items may not be recoverable","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":81,"author":{"gitId":"woodenclock"},"content":"Example:","lastModifiedDate":"2023-10-25"},{"lineNumber":82,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"woodenclock"},"content":"delete 1","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"woodenclock"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-25"},{"lineNumber":85,"author":{"gitId":"woodenclock"},"content":"The entry has been removed.","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"woodenclock"},"content":"Now you have 0 entries in the list.","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"woodenclock"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":89,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":91,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":93,"author":{"gitId":"woodenclock"},"content":"--- ","lastModifiedDate":"2023-10-25"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":95,"author":{"gitId":"imaginarys96"},"content":"### 3. Listing Entries: `list`","lastModifiedDate":"2023-10-28"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":"Shows a list of all entries of wildlife in the WildWatch so far.","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"woodenclock"},"content":"Shows useful information about each entry.","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":"Information such as the species, name, age, gender, size, remarks are shown together.","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":"Format: `list` ","lastModifiedDate":"2023-10-25"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":"Example: ","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":"________________________________________","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"woodenclock"},"content":"list","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"woodenclock"},"content":"________________________________________","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":"There are 2 entries in the list:","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":109,"author":{"gitId":"woodenclock"},"content":"Species: Low land gorilla | Name: gorilla_01 | Age: | Gender: | Size: | Remarks:","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":111,"author":{"gitId":"woodenclock"},"content":"Species: African elephant | Name: strongOne | Age: 25 | Gender: M | Size: 5.5M | Remarks: Herd leader","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"woodenclock"},"content":"```","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":114,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":116,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":117,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":118,"author":{"gitId":"imaginarys96"},"content":"### 4. Getting Help : `help`","lastModifiedDate":"2023-10-28"},{"lineNumber":119,"author":{"gitId":"imaginarys96"},"content":"Shows the user how to use all the commands.","lastModifiedDate":"2023-10-28"},{"lineNumber":120,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":121,"author":{"gitId":"imaginarys96"},"content":"Format: `help`","lastModifiedDate":"2023-10-28"},{"lineNumber":122,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":123,"author":{"gitId":"imaginarys96"},"content":"Example:","lastModifiedDate":"2023-10-28"},{"lineNumber":124,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":125,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":126,"author":{"gitId":"imaginarys96"},"content":"help","lastModifiedDate":"2023-10-28"},{"lineNumber":127,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":128,"author":{"gitId":"imaginarys96"},"content":"No worries, I\u0027m here to help!","lastModifiedDate":"2023-10-28"},{"lineNumber":129,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":130,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":131,"author":{"gitId":"imaginarys96"},"content":"---------------------------HELP PAGE-----------------------------","lastModifiedDate":"2023-10-28"},{"lineNumber":132,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":133,"author":{"gitId":"imaginarys96"},"content":"_________________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":134,"author":{"gitId":"imaginarys96"},"content":"1. Get help - show the list of commands available for this app","lastModifiedDate":"2023-10-28"},{"lineNumber":135,"author":{"gitId":"imaginarys96"},"content":" Format: help","lastModifiedDate":"2023-10-28"},{"lineNumber":136,"author":{"gitId":"imaginarys96"},"content":" Examples: ","lastModifiedDate":"2023-10-28"},{"lineNumber":137,"author":{"gitId":"imaginarys96"},"content":" help","lastModifiedDate":"2023-10-28"},{"lineNumber":138,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":139,"author":{"gitId":"imaginarys96"},"content":"_________________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":140,"author":{"gitId":"imaginarys96"},"content":"2. To add a new wildlife","lastModifiedDate":"2023-10-28"},{"lineNumber":141,"author":{"gitId":"imaginarys96"},"content":" Format: add D/DATE S/SPECIES N/NAME R/REMARKS","lastModifiedDate":"2023-10-28"},{"lineNumber":142,"author":{"gitId":"imaginarys96"},"content":" DATE should be in the format DD-MM-YY","lastModifiedDate":"2023-10-28"},{"lineNumber":143,"author":{"gitId":"imaginarys96"},"content":" Examples: ","lastModifiedDate":"2023-10-28"},{"lineNumber":144,"author":{"gitId":"imaginarys96"},"content":" add D/02-03-23 S/Annam Leaf Turtle N/Ariel R/Injured left flipper","lastModifiedDate":"2023-10-28"},{"lineNumber":145,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":146,"author":{"gitId":"imaginarys96"},"content":"_________________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":147,"author":{"gitId":"imaginarys96"},"content":"3. To list all wildlife,","lastModifiedDate":"2023-10-28"},{"lineNumber":148,"author":{"gitId":"imaginarys96"},"content":" Format: list","lastModifiedDate":"2023-10-28"},{"lineNumber":149,"author":{"gitId":"imaginarys96"},"content":" Examples: ","lastModifiedDate":"2023-10-28"},{"lineNumber":150,"author":{"gitId":"imaginarys96"},"content":" list","lastModifiedDate":"2023-10-28"},{"lineNumber":151,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":152,"author":{"gitId":"imaginarys96"},"content":"_________________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":153,"author":{"gitId":"imaginarys96"},"content":"4. To delete a wildlife","lastModifiedDate":"2023-10-28"},{"lineNumber":154,"author":{"gitId":"imaginarys96"},"content":" Format: delete INDEX","lastModifiedDate":"2023-10-28"},{"lineNumber":155,"author":{"gitId":"imaginarys96"},"content":" The index refers to the index number shown in the displayed observation list.","lastModifiedDate":"2023-10-28"},{"lineNumber":156,"author":{"gitId":"imaginarys96"},"content":" Note:","lastModifiedDate":"2023-10-28"},{"lineNumber":157,"author":{"gitId":"imaginarys96"},"content":" - The index must be a positive integer:","lastModifiedDate":"2023-10-28"},{"lineNumber":158,"author":{"gitId":"imaginarys96"},"content":" - Deleted items may not be recoverable:","lastModifiedDate":"2023-10-28"},{"lineNumber":159,"author":{"gitId":"imaginarys96"},"content":" Examples: ","lastModifiedDate":"2023-10-28"},{"lineNumber":160,"author":{"gitId":"imaginarys96"},"content":" delete 1","lastModifiedDate":"2023-10-28"},{"lineNumber":161,"author":{"gitId":"imaginarys96"},"content":"_________________________________________________________________","lastModifiedDate":"2023-10-28"},{"lineNumber":162,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":163,"author":{"gitId":"imaginarys96"},"content":"-------------------------HELP PAGE END---------------------------","lastModifiedDate":"2023-10-28"},{"lineNumber":164,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-28"},{"lineNumber":165,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":166,"author":{"gitId":"imaginarys96"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":167,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":168,"author":{"gitId":"imaginarys96"},"content":"--- ","lastModifiedDate":"2023-10-28"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":170,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2023-10-26"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":172,"author":{"gitId":"woodenclock"},"content":"\u003e **Q**: Why do I get the `OOPS!!! Invalid Date input :-(` error? ","lastModifiedDate":"2023-10-26"},{"lineNumber":173,"author":{"gitId":"woodenclock"},"content":"\u003e **A**: Ensure the day, month, year is separated by `-` e.g., `23-05-23` in **DD-MM-YY** format. ","lastModifiedDate":"2023-10-26"},{"lineNumber":174,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":175,"author":{"gitId":"woodenclock"},"content":"\u003e **Q**: I found a bug! What do I do? ","lastModifiedDate":"2023-10-26"},{"lineNumber":176,"author":{"gitId":"woodenclock"},"content":"\u003e **A**: Great! Please contact [Min](https://github.com/woodenclock), your help is greatly appreciated!","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":178,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-27"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":180,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":182,"author":{"gitId":"woodenclock"},"content":"## Command Reference 🐱","lastModifiedDate":"2023-10-25"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":184,"author":{"gitId":"woodenclock"},"content":"| Action | Format |","lastModifiedDate":"2023-10-25"},{"lineNumber":185,"author":{"gitId":"woodenclock"},"content":"| -------------- | ------ |","lastModifiedDate":"2023-10-25"},{"lineNumber":186,"author":{"gitId":"woodenclock"},"content":"| Getting Help | `help` |","lastModifiedDate":"2023-10-25"},{"lineNumber":187,"author":{"gitId":"woodenclock"},"content":"| Add Entries | `add D/\u003cDATE\u003e S/\u003cSPECIES\u003e N/\u003cNAME\u003e R/\u003cREMARKS\u003e` |","lastModifiedDate":"2023-10-26"},{"lineNumber":188,"author":{"gitId":"woodenclock"},"content":"| Delete Entries | `delete \u003cINDEX\u003e` |","lastModifiedDate":"2023-10-26"},{"lineNumber":189,"author":{"gitId":"woodenclock"},"content":"| List Entries | `list` |","lastModifiedDate":"2023-10-25"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":191,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"imaginarys96":55,"woodenclock":106,"-":30}},{"path":"docs/team/leesungmin.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# Lee Sungmin","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"Hi there! Hope you are doing great!","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"woodenclock":3}},{"path":"src/main/java/seedu/wildwatch/WildWatch.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.LogHandler;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.BootUp;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.FileHandler;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.InputHandler;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"public class WildWatch {","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" * Main entry-point for the java.wildwatch.WildWatch application.","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" LogHandler.configure(); //Configure Log","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" BootUp.bootUpOne();","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" FileHandler.handleFile(); //FileHandler takes on","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" InputHandler.handleManualInput();","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"woodenclock":12,"-":7}},{"path":"src/main/java/seedu/wildwatch/command/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" * Command class for adding entry to EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":" public static final Pattern ADD_ENTRY_COMMAND_FORMAT \u003d","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" Pattern.compile(\"add\"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" + \" D/(?\u003cdate\u003e[^/]+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" + \" S/(?\u003cspecies\u003e[^/]+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" + \" N/(?\u003cname\u003e[^/]+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" + \"(?: R/(?\u003cremark\u003e[^/]+))?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" //TODO[PARSER]: TEMPORARY. REMOVE LATER.","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":" public AddCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" public void execute() throws IncorrectInputException {","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"lctxct"},"content":" final Matcher matcher \u003d ADD_ENTRY_COMMAND_FORMAT.matcher(inputBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"lctxct"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"lctxct"},"content":" throw new IncorrectInputException();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"lctxct"},"content":" final String date \u003d matcher.group(\"date\").trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"lctxct"},"content":" final String species \u003d matcher.group(\"species\").trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"lctxct"},"content":" final String name \u003d matcher.group(\"name\").trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"lctxct"},"content":" final String remark \u003d matcher.group(\"remark\");","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" EntryList.addEntry(new Entry(date, species, name, remark));","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"lctxct"},"content":" Ui.entryAddedMessagePrinter();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" Ui.printEntry(EntryList.getArraySize() - 1);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" Ui.entryCountPrinter();","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":12,"lctxct":40}},{"path":"src/main/java/seedu/wildwatch/command/ByeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.EntryHandler;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.ShutDown;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(EntryHandler.class.getName());","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" public static void exitProgram() {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.INFO, \"Initiating shutdown procedures.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" ShutDown.shutDown();","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" //TODO: figure out a way to get rid of this","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"woodenclock":15,"lctxct":8}},{"path":"src/main/java/seedu/wildwatch/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" * Command class for manipulating EntryList","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" public Command() {}","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":" public abstract void execute() throws IncorrectInputException;","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":8,"lctxct":4}},{"path":"src/main/java/seedu/wildwatch/command/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" * Command class for deleting entry in EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"lctxct"},"content":" private final int numberInput;","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":" public DeleteCommand(int numberInput) {","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":" this.numberInput \u003d numberInput;","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"tangzhenen"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" * Deletes entry in the EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"tangzhenen"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"tangzhenen"},"content":" Ui.entryRemovedMessagePrinter();","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" EntryList.deleteEntry(numberInput);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"tangzhenen"},"content":" Ui.entryCountPrinter();","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":10,"tangzhenen":7,"lctxct":10}},{"path":"src/main/java/seedu/wildwatch/command/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" * Handles the \"find\" command to search for tasks that contain a specific keyword.","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" //TODO[PARSER]: SHOULD BE REMOVED AFTER IMPLEMENTING PARSER","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" public FindCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" * Searches for tasks that contain the specified keyword and prints them.","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" boolean hasMatch \u003d false;","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" String matchingWord \u003d inputBuffer.substring(inputBuffer.indexOf(\"find\") + 5).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" ArrayList\u003cEntry\u003e entries \u003d EntryList.getArray();","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" ArrayList\u003cInteger\u003e matchingEntries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" LocalDate inputDate \u003d null;","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" inputDate \u003d LocalDate.parse(matchingWord, DateTimeFormatter.ofPattern(\"dd-MM-yy\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" // matchingWord is not a date","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" for (Entry entry: entries) {","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" boolean isInputADate \u003d (inputDate !\u003d null \u0026\u0026 entry.getDate().equals(inputDate));","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" if (entry.getSpecies().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" || entry.getSpecies().toLowerCase().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" || entry.getName().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" || entry.getName().toLowerCase().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" || entry.getRemark().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" || entry.getRemark().toLowerCase().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" || isInputADate) {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" hasMatch \u003d true;","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" matchingEntries.add(entries.indexOf(entry));","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" Ui.findTaskMessagePrinter(hasMatch, matchingEntries);","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"woodenclock":47,"lctxct":12}},{"path":"src/main/java/seedu/wildwatch/command/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" * Requires UPDATE","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"imaginarys96"},"content":" private static final String helpCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":" \"1. Get help - show the list of commands available for this app\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"imaginarys96"},"content":" \" Format: help\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" \" help\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"imaginarys96"},"content":" private static final String addCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"imaginarys96"},"content":" \"2. To add a new wildlife\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"imaginarys96"},"content":" \" Format: add D/DATE S/SPECIES N/NAME R/REMARKS\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"imaginarys96"},"content":" \" DATE should be in the format DD-MM-YY\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" \" add D/02-03-23 S/Annam Leaf Turtle N/Ariel R/Injured left flipper\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"imaginarys96"},"content":" private static final String listCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"imaginarys96"},"content":" \"3. To list all wildlife,\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"imaginarys96"},"content":" \" Format: list\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" \" list\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"imaginarys96"},"content":" private static final String deleteCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":" \"4. To delete a wildlife\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"imaginarys96"},"content":" \" Format: delete INDEX\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"imaginarys96"},"content":" \" The index refers to the index number shown in the displayed observation list.\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"imaginarys96"},"content":" \" Note:\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"imaginarys96"},"content":" \" - The index must be a positive integer:\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"imaginarys96"},"content":" \" - Deleted items may not be recoverable:\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"imaginarys96"},"content":" \" delete 1\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" private static final String helpPage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" \"---------------------------HELP PAGE-----------------------------\\n\"+","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"imaginarys96"},"content":" helpCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"imaginarys96"},"content":" addCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"imaginarys96"},"content":" listCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"imaginarys96"},"content":" deleteCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-11"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" \"-------------------------HELP PAGE END---------------------------\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" private static final String needHelpPage \u003d","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" \"Please type \\\"help\\\" if you need help\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" \"\\n\";","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":" public static void printNeedHelpMessage() {","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" System.out.println(needHelpPage);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" * Prints out help page","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"lctxct"},"content":" System.out.println(\"No worries, I\u0027m here to help!\");","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" System.out.println(helpPage);","lastModifiedDate":"2023-10-11"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"imaginarys96":30,"woodenclock":40,"lctxct":5}},{"path":"src/main/java/seedu/wildwatch/command/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" * Command class for listing all entries in EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" * Lists out all entry in EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":" public static void listEntry() {","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" int arraySize \u003d EntryList.getArraySize();","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" for (int i \u003d 0; i \u003c arraySize; i++) {","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" System.out.print(i + 1 + \".\");","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" Ui.printEntry(i);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" Ui.entryCountPrinter();","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" Ui.listMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":" listEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":21,"lctxct":9}},{"path":"src/main/java/seedu/wildwatch/command/SummaryCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"imaginarys96"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"imaginarys96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"imaginarys96"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"imaginarys96"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"imaginarys96"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":"/**","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"imaginarys96"},"content":" * Command class for `summary`","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"imaginarys96"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"imaginarys96"},"content":"public class SummaryCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"summary\";","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" //TODO[PARSER]: REMOVE L8ER","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" public SummaryCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":" private static Map\u003cString, List\u003cEntry\u003e\u003e groupEntriesBySpecies(List\u003cEntry\u003e entries) {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e map \u003d new HashMap\u003cString, List\u003cEntry\u003e\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"imaginarys96"},"content":" for (Entry entry : entries) {","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"imaginarys96"},"content":" String key \u003d entry.getSpecies();","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"imaginarys96"},"content":" if(map.containsKey(key)){","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d map.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"imaginarys96"},"content":" }else{","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d new ArrayList\u003cEntry\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"imaginarys96"},"content":" map.put(key, list);","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"imaginarys96"},"content":" return map;","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"lctxct"},"content":" private static Map\u003cString, List\u003cEntry\u003e\u003e groupSpecieByName(List\u003cEntry\u003e filteredEntries) {","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e filteredMap \u003d new HashMap\u003cString, List\u003cEntry\u003e\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":" for (Entry entry : filteredEntries) {","lastModifiedDate":"2023-10-28"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" String key \u003d entry.getName();","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"imaginarys96"},"content":" if(filteredMap.containsKey(key)){","lastModifiedDate":"2023-10-28"},{"lineNumber":49,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d filteredMap.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":51,"author":{"gitId":"imaginarys96"},"content":" }else{","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d new ArrayList\u003cEntry\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"imaginarys96"},"content":" filteredMap.put(key, list);","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"imaginarys96"},"content":" return filteredMap;","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"lctxct"},"content":" public void execute() throws IncorrectInputException {","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"imaginarys96"},"content":" String argument \u003d inputBuffer.replace(\"summary\",\"\").trim();","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"imaginarys96"},"content":" String speciesName \u003d argument;","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"imaginarys96"},"content":" boolean hasArgument \u003d !argument.isEmpty();","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"imaginarys96"},"content":" ArrayList\u003cEntry\u003e entries \u003d EntryList.getArray();","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"imaginarys96"},"content":" // Group entries by .species attribute","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e map \u003d groupEntriesBySpecies(entries);","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"imaginarys96"},"content":" // change message based on whether `summary` or `summary \u003cspecies\u003e`","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"imaginarys96"},"content":" if( hasArgument ) {","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"imaginarys96"},"content":" Ui.printSummaryNameMessage(speciesName);","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e filteredEntries \u003d map.get(speciesName);","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e filteredMap \u003d groupSpecieByName(filteredEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"imaginarys96"},"content":" filteredMap.forEach((key, value) -\u003e System.out.println(key + \" - (\" + value.size() + \")\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"imaginarys96"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"imaginarys96"},"content":" Ui.printSummarySpecieMessage();","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"imaginarys96"},"content":" map.forEach((key, value) -\u003e System.out.println(key + \" - (\" + value.size() + \")\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"imaginarys96"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"imaginarys96":65,"lctxct":13}},{"path":"src/main/java/seedu/wildwatch/entry/Entry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.entry;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"public class Entry {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" private LocalDate date;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" private String species;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" private String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" private String remark;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" public Entry(String date, String species, String name, String remark) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yy\");","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" this.date \u003d LocalDate.parse(date, inputFormat);","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" this.species \u003d species;","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" this.remark \u003d remark;","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" public LocalDate getDate() {","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" return date;","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" public String getSpecies() {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" return species;","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" public String getName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" return name;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" public String getRemark() {","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" return remark;","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"woodenclock":35}},{"path":"src/main/java/seedu/wildwatch/entry/EntryList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.entry;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.FileHandler;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public class EntryList {","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" private static ArrayList\u003cEntry\u003e entries \u003d new ArrayList\u003c\u003e(); //Keeps track of all Entry instances made","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" public static ArrayList\u003cEntry\u003e getArray() {","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" return entries;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" public static int getArraySize() {","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" return entries.size();","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" public static void addEntry(Entry newEntry) {","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" entries.add(newEntry);","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" public static void deleteEntry(int numberInput){","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" entries.remove(numberInput - 1);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" public static Entry getEntry(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" return entries.get(nthEntry);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" public static LocalDate getEntryDate(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getDate();","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" public static String getEntrySpecies(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getSpecies();","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" public static String getEntryName(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getName();","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" public static String getEntryRemark(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getRemark();","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" public static boolean isArrayEmpty() {","lastModifiedDate":"2023-10-11"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" return entries.isEmpty();","lastModifiedDate":"2023-10-11"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" public static void saveEntry() {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" FileHandler.saver(entries);","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":52,"lctxct":2}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyAddException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyAddException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyDeleteException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyDeleteException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyFindException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyFindException extends Exception {","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyInputException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyInputException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyListException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyListException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EntryNotFoundException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EntryNotFoundException extends Exception {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/IncorrectInputException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lctxct"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"public class IncorrectInputException extends Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"lctxct":4}},{"path":"src/main/java/seedu/wildwatch/exception/UnknownDateFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class UnknownDateFormatException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/UnknownInputException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class UnknownInputException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/operation/BootUp.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class BootUp {","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":" public static final String WELCOME_MESSAGE_1 \u003d","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" \"Hello there! Welcome to WildWatch!\\n\";","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" public static final String WELCOME_MESSAGE_2 \u003d","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" \"What would you like to do?\\n\";","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" public static final String LOGO \u003d","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" \"____ __ ____ __ __ _______\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" \"\\\\ \\\\ / \\\\ / / | | | | | \\\\\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" \" \\\\ \\\\/ \\\\/ / | | | | | .--. |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" \" \\\\ / | | | | | | | |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" \" \\\\ /\\\\ / | | | `----.| \u0027--\u0027 |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" \" \\\\__/ \\\\__/ |__| |_______||_______/\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" \"____ __ ____ ___ .___________. ______ __ __\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" \"\\\\ \\\\ / \\\\ / / / \\\\ | | / || | | |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" \" \\\\ \\\\/ \\\\/ / / ^ \\\\ `---| |----`| ,----\u0027| |__| |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" \" \\\\ / / /_\\\\ \\\\ | | | | | __ |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" \" \\\\ /\\\\ / / _____ \\\\ | | | `----.| | | |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" \" \\\\__/ \\\\__/ /__/ \\\\__\\\\ |__| \\\\______||__| |__|\\n\";","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" public static void bootUpOne() {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" System.out.print(BootUp.LOGO);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" System.out.print(BootUp.WELCOME_MESSAGE_1);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" public static void bootUpTwo() {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" System.out.print(BootUp.WELCOME_MESSAGE_2);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"woodenclock":35}},{"path":"src/main/java/seedu/wildwatch/operation/DateHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"public class DateHandler {","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" private static final Pattern DATE_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" \"(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-\\\\d{2}\" // dd-mm-yy","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" );","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" public static boolean isDateValid(String inputBuffer) {","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" //Trims off everything except date","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" CharSequence date \u003d inputBuffer.substring(inputBuffer.indexOf(\"D/\") + 2, inputBuffer.indexOf(\"S/\")).trim();","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" if (DATE_PATTERN.matcher(date).matches()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" return true;","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" return false;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" } catch (StringIndexOutOfBoundsException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" return false;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":21}},{"path":"src/main/java/seedu/wildwatch/operation/EntryHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.Command;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.AddCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.DeleteCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.FindCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.HelpCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.ListCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.SummaryCommand;","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.ByeCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownInputException;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"public class EntryHandler {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" private static final int DEFAULT_NUMBER_INPUT \u003d -3710; //Number that can never be input in normal use of WildWatch","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(EntryHandler.class.getName());","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" public static Command handleEntry(String inputBuffer)","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" throws UnknownInputException, IncorrectInputException {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.INFO, \"Managing entry for input: {0}\", inputBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" Scanner bufferScanner \u003d new Scanner(inputBuffer); //Scanner for the buffer","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" String firstWord \u003d bufferScanner.next(); //Stores first word in the input","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" assert firstWord !\u003d null \u0026\u0026 !firstWord.isEmpty() : \"First word shouldn\u0027t be null or empty\";","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"lctxct"},"content":" //TODO: weird place to put this","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" boolean hasInputInteger \u003d bufferScanner.hasNextInt(); //Indicates that some integer was input","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" int numberInput \u003d DEFAULT_NUMBER_INPUT; //Stores the number input","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" if (hasInputInteger) {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" numberInput \u003d bufferScanner.nextInt();","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" assert numberInput !\u003d DEFAULT_NUMBER_INPUT : \"Number input wasn\u0027t parsed correctly\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" //Functionalities","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"lctxct"},"content":" if (firstWord.equals(AddCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"lctxct"},"content":" return new AddCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(DeleteCommand.COMMAND_WORD) \u0026\u0026 hasInputInteger \u0026\u0026 !bufferScanner.hasNext()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" assert numberInput \u003e 0 : \"Entry number to delete should be positive\";","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"lctxct"},"content":" return new DeleteCommand(numberInput);","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(FindCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"lctxct"},"content":" return new FindCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"lctxct"},"content":" } else if (inputBuffer.equals(ListCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"lctxct"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(SummaryCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"lctxct"},"content":" return new SummaryCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(HelpCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"lctxct"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(ByeCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"lctxct"},"content":" return new ByeCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.WARNING, \"Unknown input received: {0}. Throwing exception.\", inputBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" throw new UnknownInputException(); //Unrecognizable by Parser","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":33,"lctxct":27}},{"path":"src/main/java/seedu/wildwatch/operation/ErrorHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.AddCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.DeleteCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.FindCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.ListCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.command.HelpCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyAddException;","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyDeleteException;","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyListException;","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyInputException;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyFindException;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EntryNotFoundException;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownInputException;","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownDateFormatException;","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":"//TODO: this file should not exist","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":"public class ErrorHandler {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" private static final int DEFAULT_NUMBER_INPUT \u003d -3710; //Number never input during normal use of WildWatch","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(ErrorHandler.class.getName());","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" public static void handleError(String inputBuffer) {","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" boolean validInput \u003d false;","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" checkError(inputBuffer);","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" EntryHandler.handleEntry(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" validInput \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyInputException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty input.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" Ui.emptyDescriptionMessagePrinter(null);","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyAddException exception){","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty add input.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":" Ui.emptyDescriptionMessagePrinter(AddCommand.COMMAND_WORD);","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyDeleteException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty delete input.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"lctxct"},"content":" Ui.emptyDescriptionMessagePrinter(DeleteCommand.COMMAND_WORD);","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyFindException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty find input.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" Ui.emptyDescriptionMessagePrinter(FindCommand.COMMAND_WORD);","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyListException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" LOGGER.info(\"List is empty.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" Ui.emptyListMessagePrinter();","lastModifiedDate":"2023-10-11"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" validInput \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" } catch (EntryNotFoundException exception) {","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Queried entry not found.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" Ui.entryNotFoundMessagePrinter();","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" validInput \u003d true;","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" } catch (UnknownInputException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Unknown input received.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" Ui.unknownInputMessagePrinter();","lastModifiedDate":"2023-10-11"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" } catch (UnknownDateFormatException | DateTimeParseException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Date is invalid.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" Ui.invalidDateMessagePrinter();","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"lctxct"},"content":" } catch (IncorrectInputException exception) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Command is invalid.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"lctxct"},"content":" Ui.incorrectInputMessagePrinter();","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" } finally {","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":" if (!validInput) {","lastModifiedDate":"2023-10-11"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":" HelpCommand.printNeedHelpMessage();","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" public static void checkError(String inputBuffer) throws EmptyInputException, EmptyAddException,","lastModifiedDate":"2023-10-11"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":" EmptyListException, EmptyDeleteException, EntryNotFoundException, UnknownDateFormatException,","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":" EmptyFindException {","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":" assert inputBuffer !\u003d null : \"Input buffer should not be null.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":" Scanner bufferScanner \u003d new Scanner(inputBuffer); //Scanner for the buffer","lastModifiedDate":"2023-10-11"},{"lineNumber":76,"author":{"gitId":"woodenclock"},"content":" String firstWord; //First word of input","lastModifiedDate":"2023-10-11"},{"lineNumber":77,"author":{"gitId":"woodenclock"},"content":" int numberInput \u003d DEFAULT_NUMBER_INPUT;","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"woodenclock"},"content":" if (!bufferScanner.hasNext()) { //Checks for the case when there is no input","lastModifiedDate":"2023-10-11"},{"lineNumber":79,"author":{"gitId":"woodenclock"},"content":" throw new EmptyInputException();","lastModifiedDate":"2023-10-11"},{"lineNumber":80,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":81,"author":{"gitId":"woodenclock"},"content":" firstWord \u003d bufferScanner.next();","lastModifiedDate":"2023-10-11"},{"lineNumber":82,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":83,"author":{"gitId":"woodenclock"},"content":" if (bufferScanner.hasNextInt()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"woodenclock"},"content":" numberInput \u003d bufferScanner.nextInt();","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":87,"author":{"gitId":"lctxct"},"content":" if (firstWord.equals(AddCommand.COMMAND_WORD) \u0026\u0026 !bufferScanner.hasNext()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":88,"author":{"gitId":"woodenclock"},"content":" throw new EmptyAddException();","lastModifiedDate":"2023-10-11"},{"lineNumber":89,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(AddCommand.COMMAND_WORD) \u0026\u0026 !(DateHandler.isDateValid(inputBuffer))) {","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":" throw new UnknownDateFormatException();","lastModifiedDate":"2023-10-11"},{"lineNumber":91,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(DeleteCommand.COMMAND_WORD) \u0026\u0026 numberInput \u003d\u003d DEFAULT_NUMBER_INPUT) {","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" throw new EmptyDeleteException();","lastModifiedDate":"2023-10-11"},{"lineNumber":93,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(DeleteCommand.COMMAND_WORD) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"lctxct"},"content":" (numberInput \u003c 1 || numberInput \u003e EntryList.getArraySize())) {","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":" throw new EntryNotFoundException();","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(FindCommand.COMMAND_WORD) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"lctxct"},"content":" !bufferScanner.hasNext() \u0026\u0026 !bufferScanner.hasNextInt()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":" throw new EmptyFindException();","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(ListCommand.COMMAND_WORD) \u0026\u0026 EntryList.isArrayEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":" throw new EmptyListException();","lastModifiedDate":"2023-10-11"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":83,"lctxct":20}},{"path":"src/main/java/seedu/wildwatch/operation/FileHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.ListCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"import java.io.File;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"public class FileHandler {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" private static final String FILE_PATH \u003d \"./WildWatch.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" private static final DateTimeFormatter STD_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yy\");","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" private static File openedFile; //File to save the entries","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" public static void handleFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" if (checkFileExistence()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" Ui.fileExistMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" loadFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" Ui.taskLoadedMessagePrinter();","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" // Lists entries loaded from file","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":" ListCommand.listEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":" } else { // File does not exist","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" Ui.noFileMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"lctxct"},"content":" createFile();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" BootUp.bootUpTwo(); //Welcome prompt message","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"lctxct"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"lctxct"},"content":" * Checks if file exists. Opens file if the file exists.","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"lctxct"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"lctxct"},"content":" * @return true if file exists; false if not","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" public static boolean checkFileExistence() {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" System.out.print(System.lineSeparator());","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" Ui.checkingIfFileExistsMessagePrinter();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" openedFile \u003d file; //File used to save tasks","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" return true;","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" * Loads tasks from file into the TaskList","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" public static void loadFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" Scanner fileReader \u003d new Scanner(openedFile); // create a Scanner using the File as the source","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" while (fileReader.hasNext()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" String lineOfFile \u003d fileReader.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"lctxct"},"content":" // Creates new entry from line in file","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"lctxct"},"content":" String[] entryDetails \u003d lineOfFile.split(\" \\\\| \");","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"lctxct"},"content":" Entry newEntry \u003d new Entry(entryDetails[0], entryDetails[1], entryDetails[2], entryDetails[3]);","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"lctxct"},"content":" EntryList.addEntry(newEntry);","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" } catch (FileNotFoundException exception) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":" Ui.fileNotFoundMessagePrinter();","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"lctxct"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"lctxct"},"content":" * Creates new file with filename specified by {@code FILE_PATH}.","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"lctxct"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"lctxct"},"content":" public static void createFile() {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"lctxct"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"lctxct"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"lctxct"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"lctxct"},"content":" openedFile \u003d file;","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"lctxct"},"content":" Ui.createNewFileMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"lctxct"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"lctxct"},"content":" Ui.fileCreationFailMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"lctxct"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"lctxct"},"content":" Ui.errorMessagePrinter(exception);","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"woodenclock"},"content":" * Manages the storage of tasks in a file.","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" * Write each task in the desired format to the file","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"woodenclock"},"content":" public static void saver(ArrayList\u003cEntry\u003e entries) {","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":" FileWriter writer \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"woodenclock"},"content":" for (Entry entry : entries) {","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":" writer.write(toFileString(entry) + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":" writer.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":" Ui.errorMessagePrinter(exception);","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":" * Returns String that is in the format to be written to file","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"woodenclock"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"woodenclock"},"content":" * @param entry","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"woodenclock"},"content":" * @return String","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"woodenclock"},"content":" * @throws IOException when there is problem with formatting the task","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"woodenclock"},"content":" public static String toFileString(Entry entry) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"woodenclock"},"content":" String date \u003d entry.getDate().format(STD_FORMAT);","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"woodenclock"},"content":" String species \u003d entry.getSpecies();","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"woodenclock"},"content":" String name \u003d entry.getName();","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"woodenclock"},"content":" String remark \u003d entry.getRemark();","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"lctxct"},"content":" return String.format(\"%s | %s | %s | %s\", date, species, name, remark);","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"woodenclock":79,"lctxct":42}},{"path":"src/main/java/seedu/wildwatch/operation/InputHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.Command;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.command.ByeCommand;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownInputException;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"public class InputHandler {","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(EntryHandler.class.getName());","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" public static void handleManualInput() {","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" while (true) {","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":" Ui.inputPromptPrinter();","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" String inputBuffer \u003d Ui.inputRetriever(); //Retrieves input of user","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.INFO, \"Input received: {0}\", inputBuffer);","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" try {","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" Command command \u003d EntryHandler.handleEntry(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" if (command instanceof ByeCommand) {","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" command.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"lctxct"},"content":" Ui.incorrectInputMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"lctxct"},"content":" } catch (UnknownInputException e) {","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"lctxct"},"content":" Ui.unknownInputMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":" EntryList.saveEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" ByeCommand.exitProgram();","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" public static void handleFileInput(String lineOfFile) {","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" EntryHandler.handleEntry(lineOfFile);","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" } catch (UnknownInputException | IncorrectInputException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"lctxct"},"content":" //TODO: this function is no longer useful but this has to be moved somewhere","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" Ui.corruptFileMessagePrinter();","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" ShutDown.shutDown();","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" System.exit(0);","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"woodenclock":35,"lctxct":18}},{"path":"src/main/java/seedu/wildwatch/operation/LogHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Handler;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public class LogHandler {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" static {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" // Configure a FileHandler","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" FileHandler file \u003d new FileHandler(\"WildWatch.log\", true);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" file.setFormatter(formatter);","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" // Obtain the root logger. An empty string gets the root logger","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" // Remove the default handlers (like ConsoleHandler)","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" for (Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" // Add the FileHandler to the root logger","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" rootLogger.addHandler(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" exception.printStackTrace();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" public static void configure() { // Call this empty method to ensure the static block runs","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"woodenclock":33}},{"path":"src/main/java/seedu/wildwatch/operation/ShutDown.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class ShutDown {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":" public static void shutDown() {","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" //Program Ending","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":10}},{"path":"src/main/java/seedu/wildwatch/operation/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.AddCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.DeleteCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.FindCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" * This is the Ui class that is in-charge of interaction with the user","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" * Represents the user interface of the application.","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" * Provides methods to interact with the user and display messages.","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate messages such as errors and tasks added","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"public class Ui {","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" private static final int NUMBER_OF_UNDERSCORES \u003d 60;","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" private static Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" public static void inputPromptPrinter() {","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" System.out.print(\"\u003e\u003e\u003e \");","lastModifiedDate":"2023-10-28"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when checking if file exists","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" public static void checkingIfFileExistsMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Checking if \\\"WildWatch.txt\\\" already exists...\");","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when file is corrupt","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" public static void corruptFileMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File is corrupted.\\nUnable to read file\");","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" public static void entryAddedMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"The following entry has been added:\");","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" public static void entryCountPrinter() {","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Now you have \" + (EntryList.getArraySize()) + \" entries in the list.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" public static void emptyDescriptionMessagePrinter(String description) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" if (description \u003d\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description cannot be empty. :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"lctxct"},"content":" } else if (description.equals(AddCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description of an add command cannot be empty. :-(\");","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"lctxct"},"content":" } else if (description.equals(DeleteCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description of a delete command cannot be empty. :-(\");","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"lctxct"},"content":" } else if (description.equals(FindCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description of a find command cannot be empty. :-(\");","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description cannot be empty. :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":" public static void emptyListMessagePrinter() {","lastModifiedDate":"2023-10-11"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! Nothing to list. :-(\");","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":" public static void entryNotFoundMessagePrinter() {","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The entry number could not be found :-(\");","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":" public static void entryRemovedMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"The entry has been removed.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":" * Prints an error message to the console.","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"woodenclock"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"woodenclock"},"content":" * @param exception The exception that occurred.","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"woodenclock"},"content":" public static void errorMessagePrinter(Exception exception) {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"An error occurred: \" + exception.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when creation of new file failed","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"woodenclock"},"content":" public static void fileCreationFailMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File creation failed.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when file already exists","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"woodenclock"},"content":" public static void fileExistMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File already exists.\\nOpening existing file...\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when file is not found","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":" public static void fileNotFoundMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File not found.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":" public static void findTaskMessagePrinter(boolean hasMatch, ArrayList\u003cInteger\u003e matchingTasks) {","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"woodenclock"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-10-25"},{"lineNumber":106,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"No matching tasks found.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-10-25"},{"lineNumber":109,"author":{"gitId":"woodenclock"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-10-25"},{"lineNumber":110,"author":{"gitId":"woodenclock"},"content":" System.out.print((i+1) + \".\");","lastModifiedDate":"2023-10-25"},{"lineNumber":111,"author":{"gitId":"woodenclock"},"content":" printEntry(matchingTasks.get(i));","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":115,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"lctxct"},"content":" public static void incorrectInputMessagePrinter() {","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"lctxct"},"content":" System.out.println(\"OOPS!!! Format of command is incorrect.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"woodenclock"},"content":" public static void invalidDateMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! Invalid Date input :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":123,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":124,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"woodenclock"},"content":" * Returns input of the user from the console.","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"woodenclock"},"content":" * @return The user\u0027s input as a trimmed string.","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"woodenclock"},"content":" public static String inputRetriever() {","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"woodenclock"},"content":" return in.nextLine().trim();","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"woodenclock"},"content":" public static void listMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Here are the entries in your list: \");","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":135,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when no file found","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"woodenclock"},"content":" public static void noFileMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"lctxct"},"content":" System.out.println(\"File does not exist.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"lctxct"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"lctxct"},"content":" * Prints out message after a new file has been created.","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"lctxct"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"lctxct"},"content":" public static void createNewFileMessagePrinter() {","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"lctxct"},"content":" System.out.println(\"Creating new file...\\nFile created successfully.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":149,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":150,"author":{"gitId":"woodenclock"},"content":" public static void printEntry(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Date: [\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"woodenclock"},"content":" EntryList.getEntryDate(nthEntry).format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy\")) + \"] | \");","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Species: [\" + EntryList.getEntrySpecies(nthEntry) + \"] | \");","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Name: [\" + EntryList.getEntryName(nthEntry) + \"] | \");","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Remark: [\" + EntryList.getEntryRemark(nthEntry) + \"]\");","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"woodenclock"},"content":" System.out.print(System.lineSeparator());","lastModifiedDate":"2023-10-11"},{"lineNumber":157,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":158,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":159,"author":{"gitId":"woodenclock"},"content":" public static void printHorizontalLines() {","lastModifiedDate":"2023-10-12"},{"lineNumber":160,"author":{"gitId":"woodenclock"},"content":" for (int i \u003d 0; i \u003c NUMBER_OF_UNDERSCORES; i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":161,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-10-12"},{"lineNumber":162,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":163,"author":{"gitId":"woodenclock"},"content":" System.out.print(System.lineSeparator());","lastModifiedDate":"2023-10-12"},{"lineNumber":164,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":165,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when tasks are loaded","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"woodenclock"},"content":" public static void taskLoadedMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"These are tasks loaded from before: \");","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"woodenclock"},"content":" public static void unknownInputMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":176,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":177,"author":{"gitId":"imaginarys96"},"content":" public static void printSummarySpecieMessage() {","lastModifiedDate":"2023-10-28"},{"lineNumber":178,"author":{"gitId":"imaginarys96"},"content":" System.out.println(\"Here are the species recorded: \");","lastModifiedDate":"2023-10-28"},{"lineNumber":179,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":180,"author":{"gitId":"imaginarys96"},"content":" public static void printSummaryNameMessage(String speciesName) {","lastModifiedDate":"2023-10-28"},{"lineNumber":181,"author":{"gitId":"imaginarys96"},"content":" System.out.println(\"Here is the data for the \" + speciesName + \", grouped by their names\");","lastModifiedDate":"2023-10-28"},{"lineNumber":182,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":183,"author":{"gitId":"tangzhenen"},"content":"}","lastModifiedDate":"2023-10-13"},{"lineNumber":184,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":185,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"imaginarys96":7,"woodenclock":147,"tangzhenen":7,"lctxct":24}},{"path":"src/test/java/seedu/wildwatch/WildWatchTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch;","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":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"public class WildWatchTest {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" public void isMainValid() {","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"woodenclock":4,"-":8}},{"path":"src/test/java/seedu/wildwatch/operation/DateHandlerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public class DateHandlerTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" public void testDateHandler() {","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Testing whether date is valid...\");","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" assertTrue(DateHandler.isDateValid(\"D/ 09-11-23 S/\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" assertFalse(DateHandler.isDateValid(\"D/9-11-23 S/\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" assertFalse(DateHandler.isDateValid(\"D/ 99-11-23 S/\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"woodenclock":18}},{"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":"woodenclock"},"content":"FC ACTUAL.TXT ACTUAL.TXT \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":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":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"# diff EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"diff ACTUAL.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" echo \"Test passed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" echo \"Test failed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"woodenclock":2,"-":22}}] +[{"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":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"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":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"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":11,"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":12,"author":{"gitId":"woodenclock"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/wildwatch/WildWatch.java` file, right-click it, and choose `Run WildWatch.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" Hello there! Welcome to Wild Watch!","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"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":27,"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":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"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":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"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":38,"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":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"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":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"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":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"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":55,"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":56,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"woodenclock":3,"-":56}},{"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":"woodenclock"},"content":" mainClass.set(\"seedu.wildwatch.WildWatch\")","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":"woodenclock"},"content":" archiveBaseName.set(\"wildwatch\")","lastModifiedDate":"2023-10-09"},{"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":"woodenclock"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"woodenclock":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":"woodenclock"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"tangzhenen"},"content":"|-------------------------------------------------------------------------------------------------------|:-----------:|:----------------------------------------:|:------------------------------------:|","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"| ![](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/252865bb-811e-48b1-9777-6c01b98500b1) | Lee Sungmin | [Github](https://github.com/woodenclock) | [Portfolio](https://github.com/AY2324S1-CS2113T-W11-2/tp/blob/master/docs/team/leesungmin.md#lee-sungmin) |","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"tangzhenen"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) |Tang Zhen En | [Github](https://github.com/tangzhenen) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"woodenclock":4,"tangzhenen":2,"-":2}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# WildWatch Developer Guide 🦣","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"## Table of Contents ","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"- [Acknowledgements](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" - [Purpose](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#purpose)","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" - [Audience](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#audience)","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" - [How to use the Developer Guide](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#how-to-use-the-developer-guide)","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"- [Introduction](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#introduction)","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"- [Design \u0026 Implementation](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#design--implementation)","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"- [Product Scope](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#product-scope)","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" - [Target User Profile](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#target-user-profile)","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" - [Value Proposition](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#value-proposition)","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":"- [User Story](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#user-stories)","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"- [Non-Funtional Requirements](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#non-functional-requirements)","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"- [Manual Testing](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#manual-testing)","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"- [Command Summary](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#command-summary)","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"- [Glossary](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#glossary)","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"-"},"content":"## Acknowledgements ","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"Meet the [people](https://ay2324s1-cs2113t-w11-2.github.io/tp/AboutUs.html) behind WildWatch, get to know them better! ","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"Some code snippets were referenced from [woodenclock](https://github.com/woodenclock/ip.git). ","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":"## Introduction 🐻","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":"### Purpose","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"This document specifies the architectural and software design decisions in the implementation of the WildWatch.","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":"### Audience","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":"The intended audience for this document are developers who would like to look under the hood and understand how WildWatch works, and are looking to introduce new functionalities into WildWatch.","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"### How to use the Developer Guide ","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":"- Are you new here? ","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":"No worries, head to the [Quick Start](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#quick-start-) page.","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":"- Lost among the pages? ","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":"Head to the [Table of Contents](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#table-of-contents) to look for the right pages. ","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":"- Need help with the functionalities? ","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"Head to the [Features](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#features-) page for detailed guidance. ","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":"- Do you have a question for us? ","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":"Head to the [FAQ](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#faq-) page. ","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"- Do you want a concise summary of all functionalities? ","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":"Head to the [Command Summary](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#command-summary-) page for a summary of all commands.","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":"- Not sure what that word meant? ","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":"Head to the [Glossary](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#glossary-) page for its meaning. ","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":"### Legend","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" Symbol | Meaning","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" -------------- |------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" ❗ IMPORTANT | These are important instructions that you should follow. ","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" ⬆ Back to top | Click to scroll back up to the `Table of Contents`.","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" 🐵 🦊 🦁 | Your cute animal friends pop up to let you know that you have reached a new section.","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":"## Quick Start 🐵","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"1. Ensure you have Java 11 or above installed in your Computer. (What is my [Java version](https://www.java.com/en/download/help/version_manual.html)?)","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":"2. Download the latest `WildWatch.jar` from [here](https://github.com/AY2324S1-CS2113T-W11-2/tp/releases).","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"3. Copy the file to the folder you want to use as the home folder for your WildWatch.","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":"4. Open a command terminal, `cd` into the folder you put the jar file in, and run the following command: `java -jar WildWatch.jar`.","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":"You should see the welcome screen as the diagram below.","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":"5. Type commands below the horizontal line and press `Enter` to execute it. (e.g. typing `help` and pressing `Enter` will show the help page).","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":"Some example commands you can try:","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":"- `list` : Lists all entries. ","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":"- `bye` : Exits the program. ","lastModifiedDate":"2023-10-29"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":"![Image](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/1dcd7951-eb68-46d5-bdae-4cb4e275d94f) ","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":77,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#table-of-contents)","lastModifiedDate":"2023-10-29"},{"lineNumber":78,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"woodenclock"},"content":"## Design \u0026 Implementation","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":81,"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":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"woodenclock"},"content":"Wildwatch is a program for a clerk managing wildlife data in a wildlife reserve via the [Command Line Interface (CLI)](https://ay2324s1-cs2113t-w11-2.github.io/tp/DeveloperGuide.html#glossary).","lastModifiedDate":"2023-10-29"},{"lineNumber":84,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"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":"woodenclock"},"content":"Target user profile are the clerks working in zoos.","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":94,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":100,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":"|v1.0|new user|see help instructions|refer to them when I forget how to use the application|","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":"|v1.0|zoo clerk|add an animal entry|record the animals in the zoo, and refer to them afterwards|","lastModifiedDate":"2023-10-21"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":"|v1.0|zoo clerk|delete an animal entry|remove redundant or invalid animal entry|","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":"|v1.0|zoo clerk|list all the entries|see what entries I have entered previously, and refer to them|","lastModifiedDate":"2023-10-21"},{"lineNumber":105,"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":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":108,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":111,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":115,"author":{"gitId":"woodenclock"},"content":"## Manual Testing","lastModifiedDate":"2023-10-21"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":117,"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"},{"lineNumber":118,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":119,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":120,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":121,"author":{"gitId":"woodenclock"},"content":"## Command Summary","lastModifiedDate":"2023-10-21"},{"lineNumber":122,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":123,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":124,"author":{"gitId":"woodenclock"},"content":"## Glossary","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"woodenclock"},"content":"* *glossary item* - Definition","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"woodenclock":94,"-":32}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# WildWatch","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"Wildwatch is a program for recording down individual wildlife in a wildlife reserve via a Command Line Interface (CLI).","lastModifiedDate":"2023-10-21"},{"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":{"woodenclock":2,"-":6}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# WildWatch User Guide 🐘","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"## Table of Contents ","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"- [Introduction](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#introduction-)","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" - [How to use the User Guide](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#how-to-use-the-user-guide)","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" - [Legend](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#legend)","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"- [Quick Start](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#quick-start-)","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"- [Features](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#features-)","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" - [Adding Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#1-adding-entries-add): `add`","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" - [Deleting Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#2-deleting-entries-delete): `delete`","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" - [Listing Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#3-listing-entries-list): `list`","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" - [Editiing Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#4-editing-entries-edit): `edit`","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" - [Summarizing Entries](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#5-summarizing-entries-summary): `summary`","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" - [Getting Help](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#6-getting-help--help): `help` ","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"- [FAQ](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#faq-)","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"- [Command Summary](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#command-summary-)","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"- [Glossary](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#glossary-)","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"## Introduction 🐻","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"Welcome aboard fellow animal lover! We are really excited to have you here! 😉 ","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"Wildwatch is a program for a clerk managing wildlife data in a wildlife reserve via the [Command Line Interface (CLI)](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#glossary-). ","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":"The purpose of this user guide is to familiarize you with the program and help you when you face a problem using it. ","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":"Its main job is to store and present animal data, this would make your job so much more convenient!","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":"### How to use the User Guide ","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":"- Are you new here? ","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":"No worries, head to the [Quick Start](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#quick-start-) page, and you will be up and running in no time! ","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"- Lost among the pages? ","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":"Head to the [Table of Contents](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents) to look for the right pages. ","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":"- Need help with the functionalities? ","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":"Head to the [Features](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#features-) page for detailed guidance. ","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"- Do you have a question for us? ","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"Head to the [FAQ](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#faq-) page. ","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":"- Do you want a concise summary of all functionalities? ","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":"Head to the [Command Summary](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#command-summary-) page for a summary of all commands.","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":"- Not sure what that word meant? ","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":"Head to the [Glossary](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#glossary-) page for its meaning. ","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"### Legend","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" Symbol | Meaning","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" -------------- |------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":" ❗ IMPORTANT | These are important instructions that you should follow. ","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" ⬆ Back to top | Click to scroll back up to the `Table of Contents`.","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" 🐵 🦊 🦁 | Your cute animal friends pop up to let you know that you have reached a new section.","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":"## Quick Start 🐵","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":"1. Ensure you have Java 11 or above installed in your Computer. (What is my [Java version](https://www.java.com/en/download/help/version_manual.html)?)","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":"2. Download the latest `WildWatch.jar` from [here](https://github.com/AY2324S1-CS2113T-W11-2/tp/releases).","lastModifiedDate":"2023-10-27"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":"3. Copy the file to the folder you want to use as the home folder for your WildWatch.","lastModifiedDate":"2023-10-27"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"4. Open a command terminal, `cd` into the folder you put the jar file in, and run the following command: `java -jar WildWatch.jar`.","lastModifiedDate":"2023-10-27"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":"You should see the welcome screen as the diagram below.","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":"5. Type commands below the horizontal line and press `Enter` to execute it. (e.g. typing `help` and pressing `Enter` will show the help page).","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"Some example commands you can try:","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":"- `list` : Lists all entries. ","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":"- `bye` : Exits the program. ","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":"![Image](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/1dcd7951-eb68-46d5-bdae-4cb4e275d94f) ","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":"## Features 🦊","lastModifiedDate":"2023-10-25"},{"lineNumber":76,"author":{"gitId":"woodenclock"},"content":"\u003e ❗ IMPORTANT","lastModifiedDate":"2023-10-25"},{"lineNumber":77,"author":{"gitId":"woodenclock"},"content":"\u003e * Capitalized words between angle brackets `\u003c \u003e` are information to be written appropriately by the user.","lastModifiedDate":"2023-10-27"},{"lineNumber":78,"author":{"gitId":"woodenclock"},"content":"\u003e * E.g., `delete \u003cINDEX\u003e` should be `delete 2`","lastModifiedDate":"2023-10-26"},{"lineNumber":79,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":80,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":81,"author":{"gitId":"imaginarys96"},"content":"### 1. Adding Entries: `add`","lastModifiedDate":"2023-10-28"},{"lineNumber":82,"author":{"gitId":"woodenclock"},"content":"Adds a new entry to the system.","lastModifiedDate":"2023-10-25"},{"lineNumber":83,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":84,"author":{"gitId":"woodenclock"},"content":"Format: `add D/\u003cDATE\u003e S/\u003cSPECIES\u003e N/\u003cNAME\u003e R/\u003cREMARKS\u003e`","lastModifiedDate":"2023-10-26"},{"lineNumber":85,"author":{"gitId":"woodenclock"},"content":"`\u003cdate\u003e` should be in the format **DD-MM-YY**","lastModifiedDate":"2023-10-25"},{"lineNumber":86,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":87,"author":{"gitId":"woodenclock"},"content":"Example: ","lastModifiedDate":"2023-10-25"},{"lineNumber":88,"author":{"gitId":"woodenclock"},"content":"![image](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/6864fe77-f579-45d1-9680-b5b30e7530b5)","lastModifiedDate":"2023-10-29"},{"lineNumber":89,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":91,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-25"},{"lineNumber":93,"author":{"gitId":"imaginarys96"},"content":"### 2. Deleting Entries: `delete`","lastModifiedDate":"2023-10-28"},{"lineNumber":94,"author":{"gitId":"woodenclock"},"content":"Deletes an entry. ","lastModifiedDate":"2023-10-25"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":"Format: `delete INDEX`","lastModifiedDate":"2023-10-25"},{"lineNumber":97,"author":{"gitId":"woodenclock"},"content":"Deletes the entry at the specified INDEX. ","lastModifiedDate":"2023-10-25"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":"The index refers to the index number shown in the displayed entry list.","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":"\u003e❗ IMPORTANT","lastModifiedDate":"2023-10-29"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":"\u003e * Index must be a positive integer 1, 2, 3, ...","lastModifiedDate":"2023-10-25"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":"\u003e * Deleted items may not be recoverable","lastModifiedDate":"2023-10-25"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":"Example: ","lastModifiedDate":"2023-10-25"},{"lineNumber":105,"author":{"gitId":"woodenclock"},"content":"![image](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/6ab91cb4-722e-4e0b-94af-095b0a9f4f24)","lastModifiedDate":"2023-10-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":108,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":109,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":110,"author":{"gitId":"imaginarys96"},"content":"### 3. Listing Entries: `list`","lastModifiedDate":"2023-10-28"},{"lineNumber":111,"author":{"gitId":"woodenclock"},"content":"Shows a list of all entries of wildlife in the WildWatch so far.","lastModifiedDate":"2023-10-25"},{"lineNumber":112,"author":{"gitId":"woodenclock"},"content":"Shows useful information about each entry.","lastModifiedDate":"2023-10-25"},{"lineNumber":113,"author":{"gitId":"woodenclock"},"content":"Information such as the species, name, age, gender, size, remarks are shown together.","lastModifiedDate":"2023-10-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":115,"author":{"gitId":"woodenclock"},"content":"Format: `list` ","lastModifiedDate":"2023-10-25"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":117,"author":{"gitId":"woodenclock"},"content":"Example: ","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"woodenclock"},"content":"![image](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/92befe34-c75e-4269-9aeb-42a6c02344bd)","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":120,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":122,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":123,"author":{"gitId":"woodenclock"},"content":"### 4. Editing Entries: `edit`","lastModifiedDate":"2023-10-29"},{"lineNumber":124,"author":{"gitId":"imaginarys96"},"content":"Edits an entry in the system.","lastModifiedDate":"2023-10-29"},{"lineNumber":125,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":126,"author":{"gitId":"imaginarys96"},"content":"Format: `edit I/\u003cINDEX\u003e D/\u003cDATE\u003e S/\u003cSPECIES\u003e N/\u003cNAME\u003e R/\u003cREMARKS\u003e`","lastModifiedDate":"2023-10-29"},{"lineNumber":127,"author":{"gitId":"imaginarys96"},"content":"`\u003cdate\u003e` should be in the format **DD-MM-YY**","lastModifiedDate":"2023-10-29"},{"lineNumber":128,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":129,"author":{"gitId":"imaginarys96"},"content":"`I/\u003cINDEX\u003e` argument is required.","lastModifiedDate":"2023-10-29"},{"lineNumber":130,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":131,"author":{"gitId":"imaginarys96"},"content":"Example:","lastModifiedDate":"2023-10-29"},{"lineNumber":132,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":133,"author":{"gitId":"imaginarys96"},"content":"edit I/1 D/02-03-24 S/Annam Leaf Turtle N/Ariel R/Injured left flipper","lastModifiedDate":"2023-10-29"},{"lineNumber":134,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":135,"author":{"gitId":"imaginarys96"},"content":"The following entry has been edited:","lastModifiedDate":"2023-10-29"},{"lineNumber":136,"author":{"gitId":"imaginarys96"},"content":"Date: [02-04-2024] | Species: [Annam Leaf Turtle] | Name: [Javier] | Remark: [Injured right flipper]","lastModifiedDate":"2023-10-29"},{"lineNumber":137,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"imaginarys96"},"content":"edit I/1 S/Green Leaf Turtle","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"imaginarys96"},"content":"The following entry has been edited:","lastModifiedDate":"2023-10-29"},{"lineNumber":143,"author":{"gitId":"imaginarys96"},"content":"Date: [02-03-2023] | Species: [Green Leaf Turtle] | Name: [Ariel] | Remark: [Injured left flipper]","lastModifiedDate":"2023-10-29"},{"lineNumber":144,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":145,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":147,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-29"},{"lineNumber":148,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":149,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":150,"author":{"gitId":"woodenclock"},"content":"### 5. Summarizing Entries: `summary`","lastModifiedDate":"2023-10-29"},{"lineNumber":151,"author":{"gitId":"imaginarys96"},"content":"Shows a summary of all wildlife in the WildWatch system.","lastModifiedDate":"2023-10-29"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":153,"author":{"gitId":"imaginarys96"},"content":"Format: `summary \u003cSPECIES\u003e`","lastModifiedDate":"2023-10-29"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":155,"author":{"gitId":"imaginarys96"},"content":"`\u003cSPECIES\u003e` argument is optional. When specified, it will show a summary of the wildlife recorded for the specified species.","lastModifiedDate":"2023-10-29"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":157,"author":{"gitId":"imaginarys96"},"content":"Example:","lastModifiedDate":"2023-10-29"},{"lineNumber":158,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":159,"author":{"gitId":"imaginarys96"},"content":"________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":160,"author":{"gitId":"imaginarys96"},"content":"summary","lastModifiedDate":"2023-10-29"},{"lineNumber":161,"author":{"gitId":"imaginarys96"},"content":"________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":162,"author":{"gitId":"imaginarys96"},"content":"Here are the species recorded: ","lastModifiedDate":"2023-10-29"},{"lineNumber":163,"author":{"gitId":"imaginarys96"},"content":"Annam Leaf Turtle - (2)","lastModifiedDate":"2023-10-29"},{"lineNumber":164,"author":{"gitId":"imaginarys96"},"content":"Green Leaf Turtle - (1)","lastModifiedDate":"2023-10-29"},{"lineNumber":165,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":166,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":167,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":168,"author":{"gitId":"imaginarys96"},"content":"summary Annam Leaf Turtle","lastModifiedDate":"2023-10-29"},{"lineNumber":169,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":170,"author":{"gitId":"imaginarys96"},"content":"Here is the data for the Annam Leaf Turtle, grouped by their names","lastModifiedDate":"2023-10-29"},{"lineNumber":171,"author":{"gitId":"imaginarys96"},"content":"Javier - (1)","lastModifiedDate":"2023-10-29"},{"lineNumber":172,"author":{"gitId":"imaginarys96"},"content":"Ariel - (1)","lastModifiedDate":"2023-10-29"},{"lineNumber":173,"author":{"gitId":"imaginarys96"},"content":"____________________________________________________________","lastModifiedDate":"2023-10-29"},{"lineNumber":174,"author":{"gitId":"imaginarys96"},"content":"```","lastModifiedDate":"2023-10-29"},{"lineNumber":175,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents) ","lastModifiedDate":"2023-10-29"},{"lineNumber":176,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-26"},{"lineNumber":177,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-29"},{"lineNumber":178,"author":{"gitId":"imaginarys96"},"content":"### 6. Getting Help : `help`","lastModifiedDate":"2023-10-29"},{"lineNumber":179,"author":{"gitId":"imaginarys96"},"content":"Shows the user how to use all the commands.","lastModifiedDate":"2023-10-28"},{"lineNumber":180,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":181,"author":{"gitId":"imaginarys96"},"content":"Format: `help`","lastModifiedDate":"2023-10-28"},{"lineNumber":182,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":183,"author":{"gitId":"imaginarys96"},"content":"Example: ","lastModifiedDate":"2023-10-28"},{"lineNumber":184,"author":{"gitId":"woodenclock"},"content":"![image](https://github.com/AY2324S1-CS2113T-W11-2/tp/assets/69474977/9acf7e67-2f0a-407a-9235-400661ce3fed)","lastModifiedDate":"2023-10-29"},{"lineNumber":185,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":186,"author":{"gitId":"imaginarys96"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-28"},{"lineNumber":187,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":188,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":189,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":190,"author":{"gitId":"woodenclock"},"content":"## FAQ 🦁","lastModifiedDate":"2023-10-29"},{"lineNumber":191,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":192,"author":{"gitId":"woodenclock"},"content":"\u003e **Q**: Why do I get the `OOPS!!! Invalid Date input :-(` error? ","lastModifiedDate":"2023-10-26"},{"lineNumber":193,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":194,"author":{"gitId":"imaginarys96"},"content":"Ensure the day, month, year is separated by `-` e.g., `23-05-23` in **DD-MM-YY** format. ","lastModifiedDate":"2023-10-29"},{"lineNumber":195,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":196,"author":{"gitId":"woodenclock"},"content":"\u003e **Q**: I found a bug! What do I do? ","lastModifiedDate":"2023-10-26"},{"lineNumber":197,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":198,"author":{"gitId":"imaginarys96"},"content":"Great! Please contact [Min](https://github.com/woodenclock), your help is greatly appreciated!","lastModifiedDate":"2023-10-29"},{"lineNumber":199,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-26"},{"lineNumber":200,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-27"},{"lineNumber":201,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-27"},{"lineNumber":202,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-26"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":204,"author":{"gitId":"woodenclock"},"content":"## Command Summary 🐱","lastModifiedDate":"2023-10-29"},{"lineNumber":205,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":206,"author":{"gitId":"woodenclock"},"content":"| Action | Format |","lastModifiedDate":"2023-10-29"},{"lineNumber":207,"author":{"gitId":"woodenclock"},"content":"| -------------- |------------------------------------------------------------|","lastModifiedDate":"2023-10-29"},{"lineNumber":208,"author":{"gitId":"woodenclock"},"content":"| Getting Help | `help` |","lastModifiedDate":"2023-10-29"},{"lineNumber":209,"author":{"gitId":"woodenclock"},"content":"| Add Entries | `add D/\u003cDATE\u003e S/\u003cSPECIES\u003e N/\u003cNAME\u003e R/\u003cREMARKS\u003e` |","lastModifiedDate":"2023-10-29"},{"lineNumber":210,"author":{"gitId":"woodenclock"},"content":"| Delete Entries | `delete \u003cINDEX\u003e` |","lastModifiedDate":"2023-10-29"},{"lineNumber":211,"author":{"gitId":"woodenclock"},"content":"| Edit Entries | `edit I/\u003cINDEX\u003e D/\u003cDATE\u003e S/\u003cSPECIES\u003e N/\u003cNAME\u003e R/\u003cREMARKS\u003e` |","lastModifiedDate":"2023-10-29"},{"lineNumber":212,"author":{"gitId":"woodenclock"},"content":"| Summarizing Entries | `summary \u003cSPECIES\u003e` |","lastModifiedDate":"2023-10-29"},{"lineNumber":213,"author":{"gitId":"woodenclock"},"content":"| List Entries | `list` |","lastModifiedDate":"2023-10-29"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":215,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-29"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":217,"author":{"gitId":"woodenclock"},"content":"--------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-10-29"},{"lineNumber":218,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":219,"author":{"gitId":"woodenclock"},"content":"## Glossary 🐨","lastModifiedDate":"2023-10-29"},{"lineNumber":220,"author":{"gitId":"woodenclock"},"content":"We are here to help you with terminologies used in the user guide, that may not be familiar to you.","lastModifiedDate":"2023-10-29"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"woodenclock"},"content":"| Terminology | Meaning |","lastModifiedDate":"2023-10-29"},{"lineNumber":223,"author":{"gitId":"imaginarys96"},"content":"| -------------- |------------------------------------------------------------|","lastModifiedDate":"2023-10-29"},{"lineNumber":224,"author":{"gitId":"woodenclock"},"content":"| Command Line Interface | A way to communicate with your computer using texts. |","lastModifiedDate":"2023-10-29"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":226,"author":{"gitId":"woodenclock"},"content":"[⬆ Back to top](https://ay2324s1-cs2113t-w11-2.github.io/tp/UserGuide.html#table-of-contents)","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"imaginarys96":61,"woodenclock":143,"-":22}},{"path":"docs/team/leesungmin.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"# Lee Sungmin\u0027s Portfolio","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"## Project: WildWatch","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"Welcome aboard fellow animal lover! We are really excited to have you here! 😉 ","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"Wildwatch is a program for a clerk managing wildlife data in a wildlife reserve via the Command Line Interface (CLI). ","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"The purpose of this user guide is to familiarize you with the program and help you when you face a problem using it. ","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"Its main job is to store and present animal data, this would make your job so much more convenient! ","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"woodenclock":8}},{"path":"src/main/java/seedu/wildwatch/WildWatch.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.LogHandler;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.BootUp;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.FileHandler;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.InputHandler;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"public class WildWatch {","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" * Main entry-point for the java.wildwatch.WildWatch application.","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" LogHandler.configure(); //Configure Log","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" BootUp.bootUpOne();","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" FileHandler.handleFile(); //FileHandler takes on","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" InputHandler.handleManualInput();","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"woodenclock":12,"-":7}},{"path":"src/main/java/seedu/wildwatch/command/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" * Command class for adding entry to EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":" public static final Pattern ADD_ENTRY_COMMAND_FORMAT \u003d","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" Pattern.compile(\"add\"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" + \" D/(?\u003cdate\u003e[^/]+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" + \" S/(?\u003cspecies\u003e[^/]+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" + \" N/(?\u003cname\u003e[^/]+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" + \"(?: R/(?\u003cremark\u003e[^/]+))?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" //TODO[PARSER]: TEMPORARY. REMOVE LATER.","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":" public AddCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" public void execute() throws IncorrectInputException {","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"lctxct"},"content":" final Matcher matcher \u003d ADD_ENTRY_COMMAND_FORMAT.matcher(inputBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"lctxct"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"lctxct"},"content":" throw new IncorrectInputException();","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"lctxct"},"content":" final String date \u003d matcher.group(\"date\").trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"lctxct"},"content":" final String species \u003d matcher.group(\"species\").trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"lctxct"},"content":" final String name \u003d matcher.group(\"name\").trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"lctxct"},"content":" final String remark \u003d matcher.group(\"remark\");","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" EntryList.addEntry(new Entry(date, species, name, remark));","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"lctxct"},"content":" Ui.entryAddedMessagePrinter();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" Ui.printEntry(EntryList.getArraySize() - 1);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" Ui.entryCountPrinter();","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":12,"lctxct":40}},{"path":"src/main/java/seedu/wildwatch/command/ByeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.ShutDown;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"lctxct"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(ByeCommand.class.getName());","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" public static void exitProgram() {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.INFO, \"Initiating shutdown procedures.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" ShutDown.shutDown();","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" //TODO: figure out a way to get rid of this","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"woodenclock":14,"lctxct":8}},{"path":"src/main/java/seedu/wildwatch/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" * Command class for manipulating EntryList","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" public Command() {}","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":" public abstract void execute() throws IncorrectInputException;","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":8,"lctxct":4}},{"path":"src/main/java/seedu/wildwatch/command/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"tangzhenen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" * Command class for deleting entry in EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":" private final int numberInput;","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":" public DeleteCommand(int numberInput) {","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":" this.numberInput \u003d numberInput;","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"tangzhenen"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" * Deletes entry in the EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"tangzhenen"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"tangzhenen"},"content":" if (numberInput \u003c\u003d 0 || numberInput \u003e EntryList.getArraySize()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"tangzhenen"},"content":" Ui.entryNotFoundMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"tangzhenen"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"tangzhenen"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"tangzhenen"},"content":" Ui.printEntry(numberInput-1);","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"tangzhenen"},"content":" Ui.entryDeletionConfirmationPrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"tangzhenen"},"content":" String confirmation \u003d scanner.nextLine().trim().toLowerCase();","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"tangzhenen"},"content":" if (confirmation.equals(\"yes\")) {","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"tangzhenen"},"content":" Ui.entryRemovedMessagePrinter();","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" EntryList.deleteEntry(numberInput);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"tangzhenen"},"content":" Ui.entryCountPrinter();","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"tangzhenen"},"content":" } else {","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"tangzhenen"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"tangzhenen"},"content":" Ui.entryNotDeletedMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":44,"author":{"gitId":"tangzhenen"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"woodenclock":10,"tangzhenen":24,"lctxct":10}},{"path":"src/main/java/seedu/wildwatch/command/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"imaginarys96"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"imaginarys96"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"imaginarys96"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"imaginarys96"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"imaginarys96"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"imaginarys96"},"content":" public static final Pattern EDIT_ENTRY_COMMAND_FORMAT \u003d","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"imaginarys96"},"content":" Pattern.compile(\"edit\"","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"imaginarys96"},"content":" + \" I/(?\u003cindex\u003e[^/]+)\"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"imaginarys96"},"content":" + \"( D/(?\u003cdate\u003e[^/]+))?\"","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"imaginarys96"},"content":" + \"( S/(?\u003cspecies\u003e[^/]+))?\"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"imaginarys96"},"content":" + \"( N/(?\u003cname\u003e[^/]+))?\"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"imaginarys96"},"content":" + \"(?: R/(?\u003cremark\u003e[^/]+))?\");","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"imaginarys96"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"imaginarys96"},"content":" public EditCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"imaginarys96"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"imaginarys96"},"content":" public Entry checkAndUpdateEntry(Entry entry, String date, String species, String name, String remark) {","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"imaginarys96"},"content":" if( date !\u003d null \u0026\u0026 !date.isEmpty() ) {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"imaginarys96"},"content":" date \u003d date.trim();","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"imaginarys96"},"content":" entry.setDate(date);","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"imaginarys96"},"content":" if( species !\u003d null \u0026\u0026 !species.isEmpty() ) {","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"imaginarys96"},"content":" species \u003d species.trim();","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"imaginarys96"},"content":" entry.setSpecies(species);","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"imaginarys96"},"content":" if( name !\u003d null \u0026\u0026 !name.isEmpty() ) {","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"imaginarys96"},"content":" name \u003d name.trim();","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":" entry.setName(name);","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"imaginarys96"},"content":" if( remark !\u003d null \u0026\u0026 !remark.isEmpty() ) {","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"imaginarys96"},"content":" remark \u003d remark.trim();","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"imaginarys96"},"content":" entry.setRemark(remark);","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"imaginarys96"},"content":" return entry;","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"imaginarys96"},"content":" public void execute() throws IncorrectInputException {","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" final Matcher matcher \u003d EDIT_ENTRY_COMMAND_FORMAT.matcher(this.inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"imaginarys96"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"imaginarys96"},"content":" throw new IncorrectInputException();","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"imaginarys96"},"content":" final String indexStr \u003d matcher.group(\"index\").trim();","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"imaginarys96"},"content":" final String date \u003d matcher.group(\"date\");","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"imaginarys96"},"content":" final String species \u003d matcher.group(\"species\");","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"imaginarys96"},"content":" final String name \u003d matcher.group(\"name\");","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"imaginarys96"},"content":" final String remark \u003d matcher.group(\"remark\");","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"imaginarys96"},"content":" int index \u003d Integer.parseInt(indexStr);","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"imaginarys96"},"content":" if( index \u003c\u003d 0 ) {","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"imaginarys96"},"content":" throw new IncorrectInputException();","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"imaginarys96"},"content":" index -\u003d 1; // EntryList is 0 based.","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"imaginarys96"},"content":" //System.out.println(indexStr + \" \" + date + \" \" + species + \" \" + name + \" \" + remark);","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"imaginarys96"},"content":" Entry currentEntry \u003d EntryList.getEntry(index);","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"imaginarys96"},"content":" Entry updatedEntry \u003d checkAndUpdateEntry(currentEntry, date, species, name, remark);","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"imaginarys96"},"content":" EntryList.editEntry(index, updatedEntry);","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"imaginarys96"},"content":" Ui.entryEditedMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"imaginarys96"},"content":" Ui.printEntry(index);","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"imaginarys96"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"imaginarys96":70}},{"path":"src/main/java/seedu/wildwatch/command/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" * Handles the \"find\" command to search for tasks that contain a specific keyword.","lastModifiedDate":"2023-10-25"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"lctxct"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" //TODO[PARSER]: SHOULD BE REMOVED AFTER IMPLEMENTING PARSER","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" public FindCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-25"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" * Searches for tasks that contain the specified keyword and prints them.","lastModifiedDate":"2023-10-25"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" boolean hasMatch \u003d false;","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" String matchingWord \u003d inputBuffer.substring(inputBuffer.indexOf(\"find\") + 5).trim();","lastModifiedDate":"2023-10-25"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" ArrayList\u003cEntry\u003e entries \u003d EntryList.getArray();","lastModifiedDate":"2023-10-25"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" ArrayList\u003cInteger\u003e matchingEntries \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-25"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" LocalDate inputDate \u003d null;","lastModifiedDate":"2023-10-25"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" inputDate \u003d LocalDate.parse(matchingWord, DateTimeFormatter.ofPattern(\"dd-MM-yy\"));","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" // matchingWord is not a date","lastModifiedDate":"2023-10-25"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" for (Entry entry: entries) {","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" boolean isInputADate \u003d (inputDate !\u003d null \u0026\u0026 entry.getDate().equals(inputDate));","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" if (entry.getSpecies().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" || entry.getSpecies().toLowerCase().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" || entry.getName().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" || entry.getName().toLowerCase().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" || entry.getRemark().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" || entry.getRemark().toLowerCase().contains(matchingWord)","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" || isInputADate) {","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" hasMatch \u003d true;","lastModifiedDate":"2023-10-25"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" matchingEntries.add(entries.indexOf(entry));","lastModifiedDate":"2023-10-25"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" Ui.findTaskMessagePrinter(hasMatch, matchingEntries);","lastModifiedDate":"2023-10-25"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"woodenclock":47,"lctxct":12}},{"path":"src/main/java/seedu/wildwatch/command/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" * Requires UPDATE","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"imaginarys96"},"content":" private static final String helpCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":" \"1. Get help - show the list of commands available for this app\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"imaginarys96"},"content":" \" Format: help\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" \" help\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"imaginarys96"},"content":" private static final String addCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"imaginarys96"},"content":" \"2. To add a new wildlife\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"imaginarys96"},"content":" \" Format: add D/DATE S/SPECIES N/NAME R/REMARKS\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"imaginarys96"},"content":" \" DATE should be in the format DD-MM-YY\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" \" add D/02-03-23 S/Annam Leaf Turtle N/Ariel R/Injured left flipper\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"imaginarys96"},"content":" private static final String listCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"imaginarys96"},"content":" \"3. To list all wildlife,\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"imaginarys96"},"content":" \" Format: list\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" \" list\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"imaginarys96"},"content":" private static final String deleteCommandMessage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":" \"4. To delete a wildlife\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"imaginarys96"},"content":" \" Format: delete INDEX\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"imaginarys96"},"content":" \" The index refers to the index number shown in the displayed observation list.\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"imaginarys96"},"content":" \" Note:\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"imaginarys96"},"content":" \" - The index must be a positive integer:\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"imaginarys96"},"content":" \" - Deleted items may not be recoverable:\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"imaginarys96"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"imaginarys96"},"content":" \" delete 1\\n\" +","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":" \"_________________________________________________________________\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" private static final String helpPage \u003d","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" \"---------------------------HELP PAGE-----------------------------\\n\"+","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"imaginarys96"},"content":" helpCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"imaginarys96"},"content":" addCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"imaginarys96"},"content":" listCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"imaginarys96"},"content":" deleteCommandMessage +","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-11"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" \"-------------------------HELP PAGE END---------------------------\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" private static final String needHelpPage \u003d","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" \"Please type \\\"help\\\" if you need help\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" \"\\n\";","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":" public static void printNeedHelpMessage() {","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" System.out.println(needHelpPage);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" * Prints out help page","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"lctxct"},"content":" System.out.println(\"No worries, I\u0027m here to help!\");","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" System.out.println(helpPage);","lastModifiedDate":"2023-10-11"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"imaginarys96":30,"woodenclock":40,"lctxct":5}},{"path":"src/main/java/seedu/wildwatch/command/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" * Command class for listing all entries in EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" * Lists out all entry in EntryList","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"lctxct"},"content":" public static void listEntry() {","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" int arraySize \u003d EntryList.getArraySize();","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" for (int i \u003d 0; i \u003c arraySize; i++) {","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" System.out.print(i + 1 + \".\");","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" Ui.printEntry(i);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" Ui.entryCountPrinter();","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" public void execute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" Ui.listMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":" listEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":21,"lctxct":9}},{"path":"src/main/java/seedu/wildwatch/command/SummaryCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"imaginarys96"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-28"},{"lineNumber":2,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":3,"author":{"gitId":"imaginarys96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-28"},{"lineNumber":4,"author":{"gitId":"imaginarys96"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-28"},{"lineNumber":5,"author":{"gitId":"imaginarys96"},"content":"import java.util.List;","lastModifiedDate":"2023-10-28"},{"lineNumber":6,"author":{"gitId":"imaginarys96"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-28"},{"lineNumber":7,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":8,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-28"},{"lineNumber":9,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-28"},{"lineNumber":10,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-28"},{"lineNumber":11,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.operation.Ui;","lastModifiedDate":"2023-10-28"},{"lineNumber":12,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":"/**","lastModifiedDate":"2023-10-28"},{"lineNumber":14,"author":{"gitId":"imaginarys96"},"content":" * Command class for `summary`","lastModifiedDate":"2023-10-28"},{"lineNumber":15,"author":{"gitId":"imaginarys96"},"content":" */","lastModifiedDate":"2023-10-28"},{"lineNumber":16,"author":{"gitId":"imaginarys96"},"content":"public class SummaryCommand extends Command {","lastModifiedDate":"2023-10-28"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"lctxct"},"content":" public static final String COMMAND_WORD \u003d \"summary\";","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" //TODO[PARSER]: REMOVE LATER","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" private String inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":" public SummaryCommand(String inputBuffer) {","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" this.inputBuffer \u003d inputBuffer;","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":" private static Map\u003cString, List\u003cEntry\u003e\u003e groupEntriesBySpecies(List\u003cEntry\u003e entries) {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":29,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e map \u003d new HashMap\u003cString, List\u003cEntry\u003e\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":30,"author":{"gitId":"imaginarys96"},"content":" for (Entry entry : entries) {","lastModifiedDate":"2023-10-28"},{"lineNumber":31,"author":{"gitId":"imaginarys96"},"content":" String key \u003d entry.getSpecies();","lastModifiedDate":"2023-10-28"},{"lineNumber":32,"author":{"gitId":"imaginarys96"},"content":" if(map.containsKey(key)){","lastModifiedDate":"2023-10-28"},{"lineNumber":33,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d map.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":34,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":35,"author":{"gitId":"imaginarys96"},"content":" }else{","lastModifiedDate":"2023-10-28"},{"lineNumber":36,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d new ArrayList\u003cEntry\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":38,"author":{"gitId":"imaginarys96"},"content":" map.put(key, list);","lastModifiedDate":"2023-10-28"},{"lineNumber":39,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":40,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":41,"author":{"gitId":"imaginarys96"},"content":" return map;","lastModifiedDate":"2023-10-28"},{"lineNumber":42,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":43,"author":{"gitId":"lctxct"},"content":" private static Map\u003cString, List\u003cEntry\u003e\u003e groupSpecieByName(List\u003cEntry\u003e filteredEntries) {","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e filteredMap \u003d new HashMap\u003cString, List\u003cEntry\u003e\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":45,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":" for (Entry entry : filteredEntries) {","lastModifiedDate":"2023-10-28"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" String key \u003d entry.getName();","lastModifiedDate":"2023-10-28"},{"lineNumber":48,"author":{"gitId":"imaginarys96"},"content":" if(filteredMap.containsKey(key)){","lastModifiedDate":"2023-10-28"},{"lineNumber":49,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d filteredMap.get(key);","lastModifiedDate":"2023-10-28"},{"lineNumber":50,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":51,"author":{"gitId":"imaginarys96"},"content":" }else{","lastModifiedDate":"2023-10-28"},{"lineNumber":52,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e list \u003d new ArrayList\u003cEntry\u003e();","lastModifiedDate":"2023-10-28"},{"lineNumber":53,"author":{"gitId":"imaginarys96"},"content":" list.add(entry);","lastModifiedDate":"2023-10-28"},{"lineNumber":54,"author":{"gitId":"imaginarys96"},"content":" filteredMap.put(key, list);","lastModifiedDate":"2023-10-28"},{"lineNumber":55,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":56,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":57,"author":{"gitId":"imaginarys96"},"content":" return filteredMap;","lastModifiedDate":"2023-10-28"},{"lineNumber":58,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":59,"author":{"gitId":"lctxct"},"content":" public void execute() throws IncorrectInputException {","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"imaginarys96"},"content":" String argument \u003d inputBuffer.replace(\"summary\",\"\").trim();","lastModifiedDate":"2023-10-28"},{"lineNumber":61,"author":{"gitId":"imaginarys96"},"content":" String speciesName \u003d argument;","lastModifiedDate":"2023-10-28"},{"lineNumber":62,"author":{"gitId":"imaginarys96"},"content":" boolean hasArgument \u003d !argument.isEmpty();","lastModifiedDate":"2023-10-28"},{"lineNumber":63,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":64,"author":{"gitId":"imaginarys96"},"content":" ArrayList\u003cEntry\u003e entries \u003d EntryList.getArray();","lastModifiedDate":"2023-10-28"},{"lineNumber":65,"author":{"gitId":"imaginarys96"},"content":" // Group entries by .species attribute","lastModifiedDate":"2023-10-28"},{"lineNumber":66,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e map \u003d groupEntriesBySpecies(entries);","lastModifiedDate":"2023-10-28"},{"lineNumber":67,"author":{"gitId":"imaginarys96"},"content":" // change message based on whether `summary` or `summary \u003cspecies\u003e`","lastModifiedDate":"2023-10-28"},{"lineNumber":68,"author":{"gitId":"imaginarys96"},"content":" if( hasArgument ) {","lastModifiedDate":"2023-10-28"},{"lineNumber":69,"author":{"gitId":"imaginarys96"},"content":" Ui.printSummaryNameMessage(speciesName);","lastModifiedDate":"2023-10-28"},{"lineNumber":70,"author":{"gitId":"imaginarys96"},"content":" List\u003cEntry\u003e filteredEntries \u003d map.get(speciesName);","lastModifiedDate":"2023-10-28"},{"lineNumber":71,"author":{"gitId":"imaginarys96"},"content":" Map\u003cString, List\u003cEntry\u003e\u003e filteredMap \u003d groupSpecieByName(filteredEntries);","lastModifiedDate":"2023-10-28"},{"lineNumber":72,"author":{"gitId":"imaginarys96"},"content":" filteredMap.forEach((key, value) -\u003e System.out.println(key + \" - (\" + value.size() + \")\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":73,"author":{"gitId":"imaginarys96"},"content":" } else {","lastModifiedDate":"2023-10-28"},{"lineNumber":74,"author":{"gitId":"imaginarys96"},"content":" Ui.printSummarySpecieMessage();","lastModifiedDate":"2023-10-28"},{"lineNumber":75,"author":{"gitId":"imaginarys96"},"content":" map.forEach((key, value) -\u003e System.out.println(key + \" - (\" + value.size() + \")\"));","lastModifiedDate":"2023-10-28"},{"lineNumber":76,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":77,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":78,"author":{"gitId":"imaginarys96"},"content":"}","lastModifiedDate":"2023-10-28"}],"authorContributionMap":{"imaginarys96":65,"woodenclock":1,"lctxct":12}},{"path":"src/main/java/seedu/wildwatch/entry/Entry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.entry;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"public class Entry {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" private LocalDate date;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" private String species;","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" private String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" private String remark;","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" public Entry(String date, String species, String name, String remark) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yy\");","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" this.date \u003d LocalDate.parse(date, inputFormat);","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" this.species \u003d species;","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" this.remark \u003d remark;","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" public LocalDate getDate() {","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" return date;","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" public String getSpecies() {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" return species;","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" public String getName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" return name;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" public String getRemark() {","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" return remark;","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"imaginarys96"},"content":" public void setDate(String date) {","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"imaginarys96"},"content":" DateTimeFormatter inputFormat \u003d DateTimeFormatter.ofPattern(\"dd-MM-yy\");","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":" this.date \u003d LocalDate.parse(date, inputFormat);","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"imaginarys96"},"content":" public void setSpecies(String species) {","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"imaginarys96"},"content":" this.species \u003d species;","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"imaginarys96"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"imaginarys96"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"imaginarys96"},"content":" public void setRemark(String remark) {","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":" this.remark \u003d remark;","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"imaginarys96":13,"woodenclock":35}},{"path":"src/main/java/seedu/wildwatch/entry/EntryList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.entry;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.operation.FileHandler;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public class EntryList {","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" private static ArrayList\u003cEntry\u003e entries \u003d new ArrayList\u003c\u003e(); //Keeps track of all Entry instances made","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" public static ArrayList\u003cEntry\u003e getArray() {","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" return entries;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" public static int getArraySize() {","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" return entries.size();","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"lctxct"},"content":" public static void addEntry(Entry newEntry) {","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"lctxct"},"content":" entries.add(newEntry);","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" public static void deleteEntry(int numberInput){","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" entries.remove(numberInput - 1);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"tangzhenen"},"content":" public static void clearEntry(){","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"tangzhenen"},"content":" entries.clear();","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" public static Entry getEntry(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" return entries.get(nthEntry);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"imaginarys96"},"content":" public static void editEntry(int nthEntry, Entry updatedEntry) {","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"imaginarys96"},"content":" entries.set(nthEntry, updatedEntry);","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" public static LocalDate getEntryDate(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getDate();","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" public static String getEntrySpecies(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getSpecies();","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" public static String getEntryName(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getName();","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" public static String getEntryRemark(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" return getEntry(nthEntry).getRemark();","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" public static boolean isArrayEmpty() {","lastModifiedDate":"2023-10-11"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" return entries.isEmpty();","lastModifiedDate":"2023-10-11"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" public static void saveEntry() {","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" FileHandler.saver(entries);","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"imaginarys96":4,"woodenclock":52,"tangzhenen":3,"lctxct":2}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyAddException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyAddException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyDeleteException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyDeleteException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyFindException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyFindException extends Exception {","lastModifiedDate":"2023-10-25"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyInputException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyInputException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EmptyListException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EmptyListException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/EntryNotFoundException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class EntryNotFoundException extends Exception {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/IncorrectInputException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lctxct"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"public class IncorrectInputException extends Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"lctxct":4}},{"path":"src/main/java/seedu/wildwatch/exception/UnknownDateFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class UnknownDateFormatException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/exception/UnknownInputException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.exception;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class UnknownInputException extends Exception {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":4}},{"path":"src/main/java/seedu/wildwatch/operation/BootUp.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class BootUp {","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":" public static final String WELCOME_MESSAGE_1 \u003d","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" \"Hello there! Welcome to WildWatch!\\n\";","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" public static final String WELCOME_MESSAGE_2 \u003d","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" \"What would you like to do?\\n\";","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" public static final String LOGO \u003d","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" \"____ __ ____ __ __ _______\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" \"\\\\ \\\\ / \\\\ / / | | | | | \\\\\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" \" \\\\ \\\\/ \\\\/ / | | | | | .--. |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" \" \\\\ / | | | | | | | |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" \" \\\\ /\\\\ / | | | `----.| \u0027--\u0027 |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" \" \\\\__/ \\\\__/ |__| |_______||_______/\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" \"____ __ ____ ___ .___________. ______ __ __\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" \"\\\\ \\\\ / \\\\ / / / \\\\ | | / || | | |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" \" \\\\ \\\\/ \\\\/ / / ^ \\\\ `---| |----`| ,----\u0027| |__| |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" \" \\\\ / / /_\\\\ \\\\ | | | | | __ |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" \" \\\\ /\\\\ / / _____ \\\\ | | | `----.| | | |\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" \" \\\\__/ \\\\__/ /__/ \\\\__\\\\ |__| \\\\______||__| |__|\\n\";","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" public static void bootUpOne() {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" System.out.print(BootUp.LOGO);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" System.out.print(BootUp.WELCOME_MESSAGE_1);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" public static void bootUpTwo() {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" System.out.print(BootUp.WELCOME_MESSAGE_2);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"woodenclock":35}},{"path":"src/main/java/seedu/wildwatch/operation/DateHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"public class DateHandler {","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" private static final Pattern DATE_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" \"(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-\\\\d{2}\" // dd-mm-yy","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" );","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" public static boolean isDateValid(String inputBuffer) {","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" //Trims off everything except date","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" CharSequence date \u003d inputBuffer.substring(inputBuffer.indexOf(\"D/\") + 2, inputBuffer.indexOf(\"S/\")).trim();","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" if (DATE_PATTERN.matcher(date).matches()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" return true;","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" return false;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" } catch (StringIndexOutOfBoundsException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" return false;","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":21}},{"path":"src/main/java/seedu/wildwatch/operation/EntryHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.Command;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.EditCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.SummaryCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.ListCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.AddCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.ByeCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.DeleteCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.FindCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"imaginarys96"},"content":"import seedu.wildwatch.command.HelpCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownInputException;","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"public class EntryHandler {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" private static final int DEFAULT_NUMBER_INPUT \u003d -3710; //Number that can never be input in normal use of WildWatch","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(EntryHandler.class.getName());","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":" public static Command handleEntry(String inputBuffer)","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" throws UnknownInputException, IncorrectInputException {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.INFO, \"Managing entry for input: {0}\", inputBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" Scanner bufferScanner \u003d new Scanner(inputBuffer); //Scanner for the buffer","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" String firstWord \u003d bufferScanner.next(); //Stores first word in the input","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" assert firstWord !\u003d null \u0026\u0026 !firstWord.isEmpty() : \"First word shouldn\u0027t be null or empty\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"lctxct"},"content":" //TODO: weird place to put this","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" boolean hasInputInteger \u003d bufferScanner.hasNextInt(); //Indicates that some integer was input","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" int numberInput \u003d DEFAULT_NUMBER_INPUT; //Stores the number input","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" if (hasInputInteger) {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" numberInput \u003d bufferScanner.nextInt();","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" assert numberInput !\u003d DEFAULT_NUMBER_INPUT : \"Number input wasn\u0027t parsed correctly\";","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" //Functionalities","lastModifiedDate":"2023-10-11"},{"lineNumber":42,"author":{"gitId":"lctxct"},"content":" if (firstWord.equals(AddCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"lctxct"},"content":" return new AddCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(DeleteCommand.COMMAND_WORD) \u0026\u0026 hasInputInteger \u0026\u0026 !bufferScanner.hasNext()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"woodenclock"},"content":" assert numberInput \u003e 0 : \"Entry number to delete should be positive\";","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"lctxct"},"content":" return new DeleteCommand(numberInput);","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(FindCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"lctxct"},"content":" return new FindCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"lctxct"},"content":" } else if (inputBuffer.equals(ListCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"lctxct"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(SummaryCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"lctxct"},"content":" return new SummaryCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(HelpCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"lctxct"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(ByeCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"lctxct"},"content":" return new ByeCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"imaginarys96"},"content":" } else if (firstWord.equals(EditCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"imaginarys96"},"content":" return new EditCommand(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.WARNING, \"Unknown input received: {0}. Throwing exception.\", inputBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":" throw new UnknownInputException(); //Unrecognizable by Parser","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"imaginarys96":12,"woodenclock":33,"lctxct":19}},{"path":"src/main/java/seedu/wildwatch/operation/ErrorHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.AddCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.DeleteCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.FindCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.ListCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.command.HelpCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyAddException;","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyDeleteException;","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyListException;","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyInputException;","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EmptyFindException;","lastModifiedDate":"2023-10-25"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.EntryNotFoundException;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownInputException;","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownDateFormatException;","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":"//TODO: this file should not exist","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":"public class ErrorHandler {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" private static final int DEFAULT_NUMBER_INPUT \u003d -3710; //Number never input during normal use of WildWatch","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(ErrorHandler.class.getName());","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" ","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" public static void handleError(String inputBuffer) {","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" boolean validInput \u003d false;","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" checkError(inputBuffer);","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" EntryHandler.handleEntry(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" validInput \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyInputException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty input.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" Ui.emptyDescriptionMessagePrinter(null);","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyAddException exception){","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty add input.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":" Ui.emptyDescriptionMessagePrinter(AddCommand.COMMAND_WORD);","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyDeleteException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty delete input.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"lctxct"},"content":" Ui.emptyDescriptionMessagePrinter(DeleteCommand.COMMAND_WORD);","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyFindException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Received an empty find input.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" Ui.emptyDescriptionMessagePrinter(FindCommand.COMMAND_WORD);","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" } catch (EmptyListException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" LOGGER.info(\"List is empty.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" Ui.emptyListMessagePrinter();","lastModifiedDate":"2023-10-11"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" validInput \u003d true;","lastModifiedDate":"2023-10-11"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" } catch (EntryNotFoundException exception) {","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Queried entry not found.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" Ui.entryNotFoundMessagePrinter();","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" validInput \u003d true;","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" } catch (UnknownInputException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Unknown input received.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" Ui.unknownInputMessagePrinter();","lastModifiedDate":"2023-10-11"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" } catch (UnknownDateFormatException | DateTimeParseException exception) {","lastModifiedDate":"2023-10-11"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Date is invalid.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" Ui.invalidDateMessagePrinter();","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"lctxct"},"content":" } catch (IncorrectInputException exception) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Command is invalid.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"lctxct"},"content":" Ui.incorrectInputMessagePrinter();","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" } finally {","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":" if (!validInput) {","lastModifiedDate":"2023-10-11"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":" HelpCommand.printNeedHelpMessage();","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" public static void checkError(String inputBuffer) throws EmptyInputException, EmptyAddException,","lastModifiedDate":"2023-10-11"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":" EmptyListException, EmptyDeleteException, EntryNotFoundException, UnknownDateFormatException,","lastModifiedDate":"2023-10-25"},{"lineNumber":73,"author":{"gitId":"woodenclock"},"content":" EmptyFindException {","lastModifiedDate":"2023-10-25"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":" assert inputBuffer !\u003d null : \"Input buffer should not be null.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"woodenclock"},"content":" Scanner bufferScanner \u003d new Scanner(inputBuffer); //Scanner for the buffer","lastModifiedDate":"2023-10-11"},{"lineNumber":76,"author":{"gitId":"woodenclock"},"content":" String firstWord; //First word of input","lastModifiedDate":"2023-10-11"},{"lineNumber":77,"author":{"gitId":"woodenclock"},"content":" int numberInput \u003d DEFAULT_NUMBER_INPUT;","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"woodenclock"},"content":" if (!bufferScanner.hasNext()) { //Checks for the case when there is no input","lastModifiedDate":"2023-10-11"},{"lineNumber":79,"author":{"gitId":"woodenclock"},"content":" throw new EmptyInputException();","lastModifiedDate":"2023-10-11"},{"lineNumber":80,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-11"},{"lineNumber":81,"author":{"gitId":"woodenclock"},"content":" firstWord \u003d bufferScanner.next();","lastModifiedDate":"2023-10-11"},{"lineNumber":82,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":83,"author":{"gitId":"woodenclock"},"content":" if (bufferScanner.hasNextInt()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"woodenclock"},"content":" numberInput \u003d bufferScanner.nextInt();","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":87,"author":{"gitId":"lctxct"},"content":" if (firstWord.equals(AddCommand.COMMAND_WORD) \u0026\u0026 !bufferScanner.hasNext()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":88,"author":{"gitId":"woodenclock"},"content":" throw new EmptyAddException();","lastModifiedDate":"2023-10-11"},{"lineNumber":89,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(AddCommand.COMMAND_WORD) \u0026\u0026 !(DateHandler.isDateValid(inputBuffer))) {","lastModifiedDate":"2023-10-29"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":" throw new UnknownDateFormatException();","lastModifiedDate":"2023-10-11"},{"lineNumber":91,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(DeleteCommand.COMMAND_WORD) \u0026\u0026 numberInput \u003d\u003d DEFAULT_NUMBER_INPUT) {","lastModifiedDate":"2023-10-29"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" throw new EmptyDeleteException();","lastModifiedDate":"2023-10-11"},{"lineNumber":93,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(DeleteCommand.COMMAND_WORD) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":94,"author":{"gitId":"lctxct"},"content":" (numberInput \u003c 1 || numberInput \u003e EntryList.getArraySize())) {","lastModifiedDate":"2023-10-29"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":" throw new EntryNotFoundException();","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(FindCommand.COMMAND_WORD) \u0026\u0026","lastModifiedDate":"2023-10-29"},{"lineNumber":97,"author":{"gitId":"lctxct"},"content":" !bufferScanner.hasNext() \u0026\u0026 !bufferScanner.hasNextInt()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":" throw new EmptyFindException();","lastModifiedDate":"2023-10-25"},{"lineNumber":99,"author":{"gitId":"lctxct"},"content":" } else if (firstWord.equals(ListCommand.COMMAND_WORD) \u0026\u0026 EntryList.isArrayEmpty()) {","lastModifiedDate":"2023-10-29"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":" throw new EmptyListException();","lastModifiedDate":"2023-10-11"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":83,"lctxct":20}},{"path":"src/main/java/seedu/wildwatch/operation/FileHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.ListCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"import java.io.File;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"public class FileHandler {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" private static final String FILE_PATH \u003d \"./WildWatch.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" private static final DateTimeFormatter STD_FORMAT \u003d DateTimeFormatter.ofPattern(\"dd-MM-yy\");","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" private static File openedFile; //File to save the entries","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" public static void handleFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" if (checkFileExistence()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" Ui.fileExistMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" loadFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" Ui.taskLoadedMessagePrinter();","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" // Lists entries loaded from file","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":" ListCommand.listEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"lctxct"},"content":" } else { // File does not exist","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" Ui.noFileMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"lctxct"},"content":" createFile();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" BootUp.bootUpTwo(); //Welcome prompt message","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"lctxct"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"lctxct"},"content":" * Checks if file exists. Opens file if the file exists.","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"lctxct"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"lctxct"},"content":" * @return true if file exists; false if not","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" public static boolean checkFileExistence() {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" System.out.print(System.lineSeparator());","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" Ui.checkingIfFileExistsMessagePrinter();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" openedFile \u003d file; //File used to save tasks","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" return true;","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" * Loads tasks from file into the TaskList","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" public static void loadFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" Scanner fileReader \u003d new Scanner(openedFile); // create a Scanner using the File as the source","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"woodenclock"},"content":" while (fileReader.hasNext()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" String lineOfFile \u003d fileReader.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"lctxct"},"content":" // Creates new entry from line in file","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"lctxct"},"content":" String[] entryDetails \u003d lineOfFile.split(\" \\\\| \");","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"lctxct"},"content":" Entry newEntry \u003d new Entry(entryDetails[0], entryDetails[1], entryDetails[2], entryDetails[3]);","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"lctxct"},"content":" EntryList.addEntry(newEntry);","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" } catch (FileNotFoundException exception) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":" Ui.fileNotFoundMessagePrinter();","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"lctxct"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"lctxct"},"content":" * Creates new file with filename specified by {@code FILE_PATH}.","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"lctxct"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"lctxct"},"content":" public static void createFile() {","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"lctxct"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"lctxct"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"lctxct"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"lctxct"},"content":" openedFile \u003d file;","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"lctxct"},"content":" Ui.createNewFileMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"lctxct"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"lctxct"},"content":" Ui.fileCreationFailMessagePrinter();","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"lctxct"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"lctxct"},"content":" Ui.errorMessagePrinter(exception);","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"woodenclock"},"content":" * Manages the storage of tasks in a file.","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" * Write each task in the desired format to the file","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"woodenclock"},"content":" public static void saver(ArrayList\u003cEntry\u003e entries) {","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":" FileWriter writer \u003d new FileWriter(FILE_PATH);","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"woodenclock"},"content":" for (Entry entry : entries) {","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":" writer.write(toFileString(entry) + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":" writer.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":" Ui.errorMessagePrinter(exception);","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":" * Returns String that is in the format to be written to file","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"woodenclock"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"woodenclock"},"content":" * @param entry","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"woodenclock"},"content":" * @return String","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"woodenclock"},"content":" * @throws IOException when there is problem with formatting the task","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"woodenclock"},"content":" public static String toFileString(Entry entry) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"woodenclock"},"content":" String date \u003d entry.getDate().format(STD_FORMAT);","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"woodenclock"},"content":" String species \u003d entry.getSpecies();","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"woodenclock"},"content":" String name \u003d entry.getName();","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"woodenclock"},"content":" String remark \u003d entry.getRemark();","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":119,"author":{"gitId":"lctxct"},"content":" return String.format(\"%s | %s | %s | %s\", date, species, name, remark);","lastModifiedDate":"2023-10-29"},{"lineNumber":120,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"woodenclock":79,"lctxct":42}},{"path":"src/main/java/seedu/wildwatch/operation/InputHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-25"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.Command;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.command.ByeCommand;","lastModifiedDate":"2023-10-25"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-25"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.IncorrectInputException;","lastModifiedDate":"2023-10-25"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.exception.UnknownInputException;","lastModifiedDate":"2023-10-25"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-25"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"public class InputHandler {","lastModifiedDate":"2023-10-25"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(InputHandler.class.getName());","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" public static void handleManualInput() {","lastModifiedDate":"2023-10-25"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" while (true) {","lastModifiedDate":"2023-10-25"},{"lineNumber":17,"author":{"gitId":"lctxct"},"content":" Ui.inputPromptPrinter();","lastModifiedDate":"2023-10-28"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" String inputBuffer \u003d Ui.inputRetriever(); //Retrieves input of user","lastModifiedDate":"2023-10-25"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" LOGGER.log(Level.INFO, \"Input received: {0}\", inputBuffer);","lastModifiedDate":"2023-10-25"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":21,"author":{"gitId":"lctxct"},"content":" try {","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":" Command command \u003d EntryHandler.handleEntry(inputBuffer);","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"lctxct"},"content":" if (command instanceof ByeCommand) {","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" break;","lastModifiedDate":"2023-10-25"},{"lineNumber":26,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-25"},{"lineNumber":29,"author":{"gitId":"lctxct"},"content":" command.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-25"},{"lineNumber":31,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"lctxct"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"lctxct"},"content":" Ui.incorrectInputMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"lctxct"},"content":" } catch (UnknownInputException e) {","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"lctxct"},"content":" Ui.unknownInputMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":38,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"lctxct"},"content":" EntryList.saveEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":" ByeCommand.exitProgram();","lastModifiedDate":"2023-10-25"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" public static void handleFileInput(String lineOfFile) {","lastModifiedDate":"2023-10-25"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-25"},{"lineNumber":45,"author":{"gitId":"lctxct"},"content":" EntryHandler.handleEntry(lineOfFile);","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"woodenclock"},"content":" } catch (UnknownInputException | IncorrectInputException exception) {","lastModifiedDate":"2023-10-25"},{"lineNumber":47,"author":{"gitId":"lctxct"},"content":" //TODO: this function is no longer useful but this has to be moved somewhere","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" Ui.corruptFileMessagePrinter();","lastModifiedDate":"2023-10-25"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" ShutDown.shutDownWithError();","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" System.exit(0);","lastModifiedDate":"2023-10-25"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-25"}],"authorContributionMap":{"woodenclock":35,"lctxct":18}},{"path":"src/main/java/seedu/wildwatch/operation/LogHandler.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.Handler;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public class LogHandler {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" private static final Logger LOGGER \u003d Logger.getLogger(LogHandler.class.getName());","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" static {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" // Configure a FileHandler","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" FileHandler file \u003d new FileHandler(\"WildWatch.log\", true);","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" SimpleFormatter formatter \u003d new SimpleFormatter();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" file.setFormatter(formatter);","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":" // Obtain the root logger. An empty string gets the root logger","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" Logger rootLogger \u003d Logger.getLogger(\"\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":" // Remove the default handlers (like ConsoleHandler)","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"woodenclock"},"content":" for (Handler handler : rootLogger.getHandlers()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" rootLogger.removeHandler(handler);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" // Add the FileHandler to the root logger","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" rootLogger.addHandler(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":" LOGGER.warning(\"Queried entry not found.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" Ui.corruptLoggerMessagePrinter();","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" ShutDown.shutDownWithError();","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" System.exit(0);","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":" public static void configure() { // Call this empty method to ensure the static block runs","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"woodenclock":38}},{"path":"src/main/java/seedu/wildwatch/operation/ShutDown.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"public class ShutDown {","lastModifiedDate":"2023-10-11"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":" public static void shutDown() {","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":" //Program Ending","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-11"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" public static void shutDownWithError() {","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" //Program Ending","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Ending program due to error...\");","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":17}},{"path":"src/main/java/seedu/wildwatch/operation/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.AddCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.DeleteCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"lctxct"},"content":"import seedu.wildwatch.command.FindCommand;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-11"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-25"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":"/**","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" * This is the Ui class that is in-charge of interaction with the user","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" * Represents the user interface of the application.","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" * Provides methods to interact with the user and display messages.","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate messages such as errors and tasks added","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"public class Ui {","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"woodenclock"},"content":" private static final int NUMBER_OF_UNDERSCORES \u003d 60;","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"woodenclock"},"content":" private static Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":23,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when checking if file exists","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"woodenclock"},"content":" public static void checkingIfFileExistsMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Checking if \\\"WildWatch.txt\\\" already exists...\");","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when file is corrupt","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"woodenclock"},"content":" public static void corruptFileMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File is corrupted.\\nUnable to read file\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"woodenclock"},"content":" public static void corruptLoggerMessagePrinter() {","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Logger is corrupted.\\nUnable to be configured\");","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"woodenclock"},"content":" public static void entryAddedMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"The following entry has been added:\");","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"imaginarys96"},"content":" public static void entryEditedMessagePrinter() {","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"imaginarys96"},"content":" System.out.println(\"The following entry has been edited:\");","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"woodenclock"},"content":" public static void entryCountPrinter() {","lastModifiedDate":"2023-10-11"},{"lineNumber":49,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Now you have \" + (EntryList.getArraySize()) + \" entries in the list.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":51,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":52,"author":{"gitId":"woodenclock"},"content":" public static void emptyDescriptionMessagePrinter(String description) {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"woodenclock"},"content":" if (description \u003d\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description cannot be empty. :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"lctxct"},"content":" } else if (description.equals(AddCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description of an add command cannot be empty. :-(\");","lastModifiedDate":"2023-10-25"},{"lineNumber":57,"author":{"gitId":"lctxct"},"content":" } else if (description.equals(DeleteCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description of a delete command cannot be empty. :-(\");","lastModifiedDate":"2023-10-25"},{"lineNumber":59,"author":{"gitId":"lctxct"},"content":" } else if (description.equals(FindCommand.COMMAND_WORD)) {","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description of a find command cannot be empty. :-(\");","lastModifiedDate":"2023-10-25"},{"lineNumber":61,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The description cannot be empty. :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":65,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":66,"author":{"gitId":"woodenclock"},"content":" public static void emptyListMessagePrinter() {","lastModifiedDate":"2023-10-11"},{"lineNumber":67,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! Nothing to list. :-(\");","lastModifiedDate":"2023-10-11"},{"lineNumber":68,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":69,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":70,"author":{"gitId":"woodenclock"},"content":" public static void entryNotFoundMessagePrinter() {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! The entry number could not be found :-(\");","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":73,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"woodenclock"},"content":" public static void entryRemovedMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"tangzhenen"},"content":" System.out.println(\"The entry has been deleted.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"tangzhenen"},"content":" printHorizontalLines();","lastModifiedDate":"2023-10-29"},{"lineNumber":77,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":78,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":79,"author":{"gitId":"tangzhenen"},"content":" public static void entryDeletionConfirmationPrinter() {","lastModifiedDate":"2023-10-29"},{"lineNumber":80,"author":{"gitId":"tangzhenen"},"content":" System.out.println(\"Are you sure you want to delete this entry? (yes/no): \");","lastModifiedDate":"2023-10-29"},{"lineNumber":81,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":83,"author":{"gitId":"tangzhenen"},"content":" public static void entryNotDeletedMessagePrinter() {","lastModifiedDate":"2023-10-29"},{"lineNumber":84,"author":{"gitId":"tangzhenen"},"content":" System.out.println(\"The entry was not deleted.\");","lastModifiedDate":"2023-10-29"},{"lineNumber":85,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"woodenclock"},"content":" * Prints an error message to the console.","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"woodenclock"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"woodenclock"},"content":" * @param exception The exception that occurred.","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"woodenclock"},"content":" public static void errorMessagePrinter(Exception exception) {","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"An error occurred: \" + exception.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when creation of new file failed","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"woodenclock"},"content":" public static void fileCreationFailMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File creation failed.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when file already exists","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"woodenclock"},"content":" public static void fileExistMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File already exists.\\nOpening existing file...\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when file is not found","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"woodenclock"},"content":" public static void fileNotFoundMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"File not found.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"woodenclock"},"content":" public static void findTaskMessagePrinter(boolean hasMatch, ArrayList\u003cInteger\u003e matchingTasks) {","lastModifiedDate":"2023-10-25"},{"lineNumber":118,"author":{"gitId":"woodenclock"},"content":" if (!hasMatch) {","lastModifiedDate":"2023-10-25"},{"lineNumber":119,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"No matching tasks found.\");","lastModifiedDate":"2023-10-25"},{"lineNumber":120,"author":{"gitId":"woodenclock"},"content":" } else {","lastModifiedDate":"2023-10-25"},{"lineNumber":121,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-10-25"},{"lineNumber":122,"author":{"gitId":"woodenclock"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-10-25"},{"lineNumber":123,"author":{"gitId":"woodenclock"},"content":" System.out.print((i+1) + \".\");","lastModifiedDate":"2023-10-25"},{"lineNumber":124,"author":{"gitId":"woodenclock"},"content":" printEntry(matchingTasks.get(i));","lastModifiedDate":"2023-10-25"},{"lineNumber":125,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":126,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":127,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-25"},{"lineNumber":128,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-25"},{"lineNumber":129,"author":{"gitId":"lctxct"},"content":" public static void incorrectInputMessagePrinter() {","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"lctxct"},"content":" System.out.println(\"OOPS!!! Format of command is incorrect.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"woodenclock"},"content":" public static void invalidDateMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! Invalid Date input :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":135,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":136,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":137,"author":{"gitId":"woodenclock"},"content":" public static void inputPromptPrinter() {","lastModifiedDate":"2023-10-29"},{"lineNumber":138,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"\u003e\u003e\u003e \");","lastModifiedDate":"2023-10-29"},{"lineNumber":139,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":140,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":141,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":142,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"woodenclock"},"content":" * Returns input of the user from the console.","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"woodenclock"},"content":" * @return The user\u0027s input as a trimmed string.","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"woodenclock"},"content":" public static String inputRetriever() {","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"woodenclock"},"content":" return in.nextLine().trim();","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"woodenclock"},"content":" public static void listMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Here are the entries in your list: \");","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":153,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when no file found","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"woodenclock"},"content":" public static void noFileMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"lctxct"},"content":" System.out.println(\"File does not exist.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":159,"author":{"gitId":"lctxct"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":160,"author":{"gitId":"lctxct"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":161,"author":{"gitId":"lctxct"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":162,"author":{"gitId":"lctxct"},"content":" * Prints out message after a new file has been created.","lastModifiedDate":"2023-10-23"},{"lineNumber":163,"author":{"gitId":"lctxct"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":164,"author":{"gitId":"lctxct"},"content":" public static void createNewFileMessagePrinter() {","lastModifiedDate":"2023-10-23"},{"lineNumber":165,"author":{"gitId":"lctxct"},"content":" System.out.println(\"Creating new file...\\nFile created successfully.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":166,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":167,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":168,"author":{"gitId":"woodenclock"},"content":" public static void printEntry(int nthEntry) {","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Date: [\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":170,"author":{"gitId":"woodenclock"},"content":" EntryList.getEntryDate(nthEntry).format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy\")) + \"] | \");","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Species: [\" + EntryList.getEntrySpecies(nthEntry) + \"] | \");","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Name: [\" + EntryList.getEntryName(nthEntry) + \"] | \");","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"Remark: [\" + EntryList.getEntryRemark(nthEntry) + \"]\");","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"woodenclock"},"content":" System.out.print(System.lineSeparator());","lastModifiedDate":"2023-10-11"},{"lineNumber":175,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":176,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":177,"author":{"gitId":"woodenclock"},"content":" public static void printHorizontalLines() {","lastModifiedDate":"2023-10-12"},{"lineNumber":178,"author":{"gitId":"woodenclock"},"content":" for (int i \u003d 0; i \u003c NUMBER_OF_UNDERSCORES; i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":179,"author":{"gitId":"woodenclock"},"content":" System.out.print(\"_\");","lastModifiedDate":"2023-10-12"},{"lineNumber":180,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":181,"author":{"gitId":"woodenclock"},"content":" System.out.print(System.lineSeparator());","lastModifiedDate":"2023-10-12"},{"lineNumber":182,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":183,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":184,"author":{"gitId":"woodenclock"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":185,"author":{"gitId":"woodenclock"},"content":" * Prints out appropriate message when tasks are loaded","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"woodenclock"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"woodenclock"},"content":" public static void taskLoadedMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":188,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"These are tasks loaded from before: \");","lastModifiedDate":"2023-10-22"},{"lineNumber":189,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":190,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":191,"author":{"gitId":"woodenclock"},"content":" public static void unknownInputMessagePrinter() {","lastModifiedDate":"2023-10-22"},{"lineNumber":192,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-10-22"},{"lineNumber":193,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":194,"author":{"gitId":"imaginarys96"},"content":"","lastModifiedDate":"2023-10-28"},{"lineNumber":195,"author":{"gitId":"imaginarys96"},"content":" public static void printSummarySpecieMessage() {","lastModifiedDate":"2023-10-28"},{"lineNumber":196,"author":{"gitId":"imaginarys96"},"content":" System.out.println(\"Here are the species recorded: \");","lastModifiedDate":"2023-10-28"},{"lineNumber":197,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":198,"author":{"gitId":"imaginarys96"},"content":" public static void printSummaryNameMessage(String speciesName) {","lastModifiedDate":"2023-10-28"},{"lineNumber":199,"author":{"gitId":"imaginarys96"},"content":" System.out.println(\"Here is the data for the \" + speciesName + \", grouped by their names\");","lastModifiedDate":"2023-10-28"},{"lineNumber":200,"author":{"gitId":"imaginarys96"},"content":" }","lastModifiedDate":"2023-10-28"},{"lineNumber":201,"author":{"gitId":"tangzhenen"},"content":"}","lastModifiedDate":"2023-10-13"},{"lineNumber":202,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":203,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"imaginarys96":10,"woodenclock":155,"tangzhenen":17,"lctxct":21}},{"path":"src/test/java/seedu/wildwatch/WildWatchTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch;","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":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"public class WildWatchTest {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" public void isMainValid() {","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"woodenclock":4,"-":8}},{"path":"src/test/java/seedu/wildwatch/command/DeleteCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"tangzhenen"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"tangzhenen"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"tangzhenen"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"tangzhenen"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"tangzhenen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"tangzhenen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"tangzhenen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"tangzhenen"},"content":"import static seedu.wildwatch.entry.EntryList.addEntry;","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"tangzhenen"},"content":"import static seedu.wildwatch.entry.EntryList.clearEntry;","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.entry.EntryList;","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"tangzhenen"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"tangzhenen"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"tangzhenen"},"content":" private final ByteArrayOutputStream mockOutput \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"tangzhenen"},"content":" private InputStream originalIn;","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"tangzhenen"},"content":" private ByteArrayInputStream mockInput;","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"tangzhenen"},"content":" @BeforeEach","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"tangzhenen"},"content":" void redirectSystemOut() {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"tangzhenen"},"content":" System.setOut(new PrintStream(mockOutput));","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"tangzhenen"},"content":" originalIn \u003d System.in;","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"tangzhenen"},"content":" @AfterEach","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"tangzhenen"},"content":" void restoreSystemOut() {","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"tangzhenen"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"tangzhenen"},"content":" System.setIn(originalIn);","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"tangzhenen"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"tangzhenen"},"content":" void testExecuteConfirmation() {","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"tangzhenen"},"content":" clearEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"tangzhenen"},"content":" addEntry(new Entry(\"28-10-23\", \"Lion\", \"Simba\", \"This is Simba.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"tangzhenen"},"content":" // Prepare user input \"yes\" for confirmation","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"tangzhenen"},"content":" mockInput \u003d new ByteArrayInputStream(\"yes\\n\".getBytes());","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"tangzhenen"},"content":" System.setIn(mockInput);","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"tangzhenen"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(1);","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"tangzhenen"},"content":" deleteCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"tangzhenen"},"content":" String consoleOutput \u003d mockOutput.toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"tangzhenen"},"content":" // Assert: Verify the confirmation message and that the entry is removed","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"tangzhenen"},"content":" assertTrue(consoleOutput.contains(\"Are you sure you want to delete this entry? (yes/no):\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"tangzhenen"},"content":" assertTrue(consoleOutput.contains(\"The entry has been deleted.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"tangzhenen"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"tangzhenen"},"content":" void testExecuteCancellation() {","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"tangzhenen"},"content":" clearEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"tangzhenen"},"content":" addEntry(new Entry(\"28-10-23\", \"Lion\", \"Simba\", \"This is Simba.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"tangzhenen"},"content":" // Prepare user input \"no\" for cancellation","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"tangzhenen"},"content":" mockInput \u003d new ByteArrayInputStream(\"no\\n\".getBytes());","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"tangzhenen"},"content":" System.setIn(mockInput);","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"tangzhenen"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(1);","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"tangzhenen"},"content":" deleteCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"tangzhenen"},"content":" String consoleOutput \u003d mockOutput.toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"tangzhenen"},"content":" // Assert: Verify the confirmation message and that the entry is not removed","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"tangzhenen"},"content":" assertTrue(consoleOutput.contains(\"Are you sure you want to delete this entry? (yes/no):\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"tangzhenen"},"content":" assertTrue(consoleOutput.contains(\"The entry was not deleted.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":74,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"tangzhenen"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":77,"author":{"gitId":"tangzhenen"},"content":" public void testDeleteCommandWithInvalidIndex(){","lastModifiedDate":"2023-10-29"},{"lineNumber":78,"author":{"gitId":"tangzhenen"},"content":" clearEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":79,"author":{"gitId":"tangzhenen"},"content":" addEntry(new Entry(\"09-11-23\", \"Lion\", \"Simba\", \"This is Simba\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":80,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":81,"author":{"gitId":"tangzhenen"},"content":" DeleteCommand deleteCommand \u003d new DeleteCommand(2);","lastModifiedDate":"2023-10-29"},{"lineNumber":82,"author":{"gitId":"tangzhenen"},"content":" deleteCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":83,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":84,"author":{"gitId":"tangzhenen"},"content":" int entryListSizeAfter \u003d EntryList.getArraySize();","lastModifiedDate":"2023-10-29"},{"lineNumber":85,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":86,"author":{"gitId":"tangzhenen"},"content":" assertEquals(1,entryListSizeAfter,\"Entry count should remain the same due to deletion of an invalid index\");","lastModifiedDate":"2023-10-29"},{"lineNumber":87,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":88,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":89,"author":{"gitId":"tangzhenen"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"tangzhenen":89}},{"path":"src/test/java/seedu/wildwatch/command/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"tangzhenen"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"tangzhenen"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"tangzhenen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"tangzhenen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"tangzhenen"},"content":"public class HelpCommandTest {","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"tangzhenen"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"tangzhenen"},"content":" private final ByteArrayOutputStream mockOutput \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"tangzhenen"},"content":" @BeforeEach","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"tangzhenen"},"content":" void redirectSystemOut() {","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"tangzhenen"},"content":" System.setOut(new PrintStream(mockOutput));","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"tangzhenen"},"content":" @AfterEach","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"tangzhenen"},"content":" void restoreSystemOut() {","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"tangzhenen"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"tangzhenen"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"tangzhenen"},"content":" void testExecute() {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"tangzhenen"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"tangzhenen"},"content":" helpCommand.execute();","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"tangzhenen"},"content":" // Define the expected help page content","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"tangzhenen"},"content":" String expectedHelpPage \u003d \"No worries, I\u0027m here to help!\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"tangzhenen"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"tangzhenen"},"content":" \"---------------------------HELP PAGE-----------------------------\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"tangzhenen"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"tangzhenen"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"tangzhenen"},"content":" \"1. Get help - show the list of commands available for this app\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"tangzhenen"},"content":" \" Format: help\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"tangzhenen"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"tangzhenen"},"content":" \" help\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"tangzhenen"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"tangzhenen"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"tangzhenen"},"content":" \"2. To add a new wildlife\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"tangzhenen"},"content":" \" Format: add D/DATE S/SPECIES N/NAME R/REMARKS\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"tangzhenen"},"content":" \" DATE should be in the format DD-MM-YY\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"tangzhenen"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"tangzhenen"},"content":" \" add D/02-03-23 S/Annam Leaf Turtle N/Ariel R/Injured left flipper\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"tangzhenen"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"tangzhenen"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"tangzhenen"},"content":" \"3. To list all wildlife,\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"tangzhenen"},"content":" \" Format: list\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"tangzhenen"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"tangzhenen"},"content":" \" list\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"tangzhenen"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"tangzhenen"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"tangzhenen"},"content":" \"4. To delete a wildlife\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"tangzhenen"},"content":" \" Format: delete INDEX\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"tangzhenen"},"content":" \" The index refers to the index number shown in the displayed observation list.\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"tangzhenen"},"content":" \" Note:\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"tangzhenen"},"content":" \" - The index must be a positive integer:\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"tangzhenen"},"content":" \" - Deleted items may not be recoverable:\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"tangzhenen"},"content":" \" Examples: \\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":63,"author":{"gitId":"tangzhenen"},"content":" \" delete 1\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":64,"author":{"gitId":"tangzhenen"},"content":" \"_________________________________________________________________\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":65,"author":{"gitId":"tangzhenen"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":66,"author":{"gitId":"tangzhenen"},"content":" \"-------------------------HELP PAGE END---------------------------\\n\" +","lastModifiedDate":"2023-10-29"},{"lineNumber":67,"author":{"gitId":"tangzhenen"},"content":" \"\\n\";","lastModifiedDate":"2023-10-29"},{"lineNumber":68,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":69,"author":{"gitId":"tangzhenen"},"content":" // Normalize the line separators in the actual and expected output to ignore differences","lastModifiedDate":"2023-10-29"},{"lineNumber":70,"author":{"gitId":"tangzhenen"},"content":" String actualOutput \u003d mockOutput.toString().replace(System.lineSeparator(), \"\\n\");","lastModifiedDate":"2023-10-29"},{"lineNumber":71,"author":{"gitId":"tangzhenen"},"content":" String expectedOutput \u003d expectedHelpPage.replace(System.lineSeparator(), \"\\n\");","lastModifiedDate":"2023-10-29"},{"lineNumber":72,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":73,"author":{"gitId":"tangzhenen"},"content":" // Assert: Verify the printed output matches the expected help page content","lastModifiedDate":"2023-10-29"},{"lineNumber":74,"author":{"gitId":"tangzhenen"},"content":" assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-29"},{"lineNumber":75,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":76,"author":{"gitId":"tangzhenen"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"tangzhenen":76}},{"path":"src/test/java/seedu/wildwatch/command/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"tangzhenen"},"content":"package seedu.wildwatch.command;","lastModifiedDate":"2023-10-29"},{"lineNumber":2,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":3,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":4,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-29"},{"lineNumber":5,"author":{"gitId":"tangzhenen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-29"},{"lineNumber":6,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":7,"author":{"gitId":"tangzhenen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-29"},{"lineNumber":8,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":9,"author":{"gitId":"tangzhenen"},"content":"import static seedu.wildwatch.entry.EntryList.addEntry;","lastModifiedDate":"2023-10-29"},{"lineNumber":10,"author":{"gitId":"tangzhenen"},"content":"import static seedu.wildwatch.entry.EntryList.clearEntry;","lastModifiedDate":"2023-10-29"},{"lineNumber":11,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":12,"author":{"gitId":"tangzhenen"},"content":"import seedu.wildwatch.entry.Entry;","lastModifiedDate":"2023-10-29"},{"lineNumber":13,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":14,"author":{"gitId":"tangzhenen"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":15,"author":{"gitId":"tangzhenen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-29"},{"lineNumber":16,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":17,"author":{"gitId":"tangzhenen"},"content":"class ListCommandTest {","lastModifiedDate":"2023-10-29"},{"lineNumber":18,"author":{"gitId":"tangzhenen"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-10-29"},{"lineNumber":19,"author":{"gitId":"tangzhenen"},"content":" private final ByteArrayOutputStream mockOutput \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-29"},{"lineNumber":20,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":21,"author":{"gitId":"tangzhenen"},"content":" @BeforeEach","lastModifiedDate":"2023-10-29"},{"lineNumber":22,"author":{"gitId":"tangzhenen"},"content":" void redirectSystemOut() {","lastModifiedDate":"2023-10-29"},{"lineNumber":23,"author":{"gitId":"tangzhenen"},"content":" System.setOut(new PrintStream(mockOutput));","lastModifiedDate":"2023-10-29"},{"lineNumber":24,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":25,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":26,"author":{"gitId":"tangzhenen"},"content":" @AfterEach","lastModifiedDate":"2023-10-29"},{"lineNumber":27,"author":{"gitId":"tangzhenen"},"content":" void restoreSystemOut() {","lastModifiedDate":"2023-10-29"},{"lineNumber":28,"author":{"gitId":"tangzhenen"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-10-29"},{"lineNumber":29,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":30,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":31,"author":{"gitId":"tangzhenen"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":32,"author":{"gitId":"tangzhenen"},"content":" void listEntry() {","lastModifiedDate":"2023-10-29"},{"lineNumber":33,"author":{"gitId":"tangzhenen"},"content":" clearEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":34,"author":{"gitId":"tangzhenen"},"content":" addEntry(new Entry(\"28-10-23\", \"Lion\", \"Simba\", \"This is Simba.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":35,"author":{"gitId":"tangzhenen"},"content":" addEntry(new Entry(\"28-10-23\", \"Tiger\", \"Tigger\", \"This is Tigger.\"));","lastModifiedDate":"2023-10-29"},{"lineNumber":36,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":37,"author":{"gitId":"tangzhenen"},"content":" ListCommand.listEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":38,"author":{"gitId":"tangzhenen"},"content":" String consoleOutput \u003d mockOutput.toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":39,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":40,"author":{"gitId":"tangzhenen"},"content":" String expectedOutput \u003d \"1.Date: [28-10-2023] | Species: [Lion] | Name: [Simba] | Remark: [This is Simba.]\"","lastModifiedDate":"2023-10-29"},{"lineNumber":41,"author":{"gitId":"tangzhenen"},"content":" + \"\\n\"","lastModifiedDate":"2023-10-29"},{"lineNumber":42,"author":{"gitId":"tangzhenen"},"content":" + \"2.Date: [28-10-2023] | Species: [Tiger] | Name: [Tigger] | Remark: [This is Tigger.]\"","lastModifiedDate":"2023-10-29"},{"lineNumber":43,"author":{"gitId":"tangzhenen"},"content":" + \"\\n\"","lastModifiedDate":"2023-10-29"},{"lineNumber":44,"author":{"gitId":"tangzhenen"},"content":" + \"Now you have 2 entries in the list.\"","lastModifiedDate":"2023-10-29"},{"lineNumber":45,"author":{"gitId":"tangzhenen"},"content":" + \"\\n\";","lastModifiedDate":"2023-10-29"},{"lineNumber":46,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":47,"author":{"gitId":"tangzhenen"},"content":" consoleOutput \u003d consoleOutput.replace(System.lineSeparator(), \"\\n\");","lastModifiedDate":"2023-10-29"},{"lineNumber":48,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":49,"author":{"gitId":"tangzhenen"},"content":" assertEquals(expectedOutput, consoleOutput);","lastModifiedDate":"2023-10-29"},{"lineNumber":50,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":51,"author":{"gitId":"tangzhenen"},"content":"","lastModifiedDate":"2023-10-29"},{"lineNumber":52,"author":{"gitId":"tangzhenen"},"content":" @Test","lastModifiedDate":"2023-10-29"},{"lineNumber":53,"author":{"gitId":"tangzhenen"},"content":" void listEntryWithZeroEntry() {","lastModifiedDate":"2023-10-29"},{"lineNumber":54,"author":{"gitId":"tangzhenen"},"content":" clearEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":55,"author":{"gitId":"tangzhenen"},"content":" ListCommand.listEntry();","lastModifiedDate":"2023-10-29"},{"lineNumber":56,"author":{"gitId":"tangzhenen"},"content":" String consoleOutput \u003d mockOutput.toString();","lastModifiedDate":"2023-10-29"},{"lineNumber":57,"author":{"gitId":"tangzhenen"},"content":" String expectedOutput \u003d \"Now you have 0 entries in the list.\"","lastModifiedDate":"2023-10-29"},{"lineNumber":58,"author":{"gitId":"tangzhenen"},"content":" + \"\\n\";","lastModifiedDate":"2023-10-29"},{"lineNumber":59,"author":{"gitId":"tangzhenen"},"content":" consoleOutput \u003d consoleOutput.replace(System.lineSeparator(), \"\\n\");","lastModifiedDate":"2023-10-29"},{"lineNumber":60,"author":{"gitId":"tangzhenen"},"content":" assertEquals(expectedOutput, consoleOutput);","lastModifiedDate":"2023-10-29"},{"lineNumber":61,"author":{"gitId":"tangzhenen"},"content":" }","lastModifiedDate":"2023-10-29"},{"lineNumber":62,"author":{"gitId":"tangzhenen"},"content":"}","lastModifiedDate":"2023-10-29"}],"authorContributionMap":{"tangzhenen":62}},{"path":"src/test/java/seedu/wildwatch/operation/DateHandlerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"woodenclock"},"content":"package seedu.wildwatch.operation;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"woodenclock"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"woodenclock"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"woodenclock"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"woodenclock"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"woodenclock"},"content":"public class DateHandlerTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"woodenclock"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"woodenclock"},"content":" public void testDateHandler() {","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"woodenclock"},"content":" System.out.println(\"Testing whether date is valid...\");","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"woodenclock"},"content":" Ui.printHorizontalLines();","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"woodenclock"},"content":" assertTrue(DateHandler.isDateValid(\"D/ 09-11-23 S/\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":" assertFalse(DateHandler.isDateValid(\"D/9-11-23 S/\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":" assertFalse(DateHandler.isDateValid(\"D/ 99-11-23 S/\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"woodenclock"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"woodenclock"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"woodenclock":18}},{"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":"woodenclock"},"content":"FC ACTUAL.TXT ACTUAL.TXT \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"woodenclock":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":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"woodenclock"},"content":"# diff EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"woodenclock"},"content":"diff ACTUAL.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" echo \"Test passed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" echo \"Test failed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"woodenclock":2,"-":22}}] diff --git a/AY2324S1-CS2113T-W11-2_tp_master/commits.json b/AY2324S1-CS2113T-W11-2_tp_master/commits.json index 73ee24e..0f7592d 100644 --- a/AY2324S1-CS2113T-W11-2_tp_master/commits.json +++ b/AY2324S1-CS2113T-W11-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"imaginarys96":[{"date":"2023-10-14","commitResults":[{"hash":"ec58ce88cfc6d13389719ba5c71f25eca9a9a801","isMergeCommit":false,"messageTitle":"Updated help command for v1 features - help, add, list, delete","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":43}}},{"hash":"bf15d755cbc672977eb38b6001162424834580fc","isMergeCommit":true,"messageTitle":"Merge pull request #31 from imaginarys96/master","messageBody":"Updated help command for v1 features - help, add, list, delete","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d99f0c79eee52e1af97c186c829392ef8e30f8aa","isMergeCommit":false,"messageTitle":"Implemented SummaryCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":80,"deletions":4}}},{"hash":"5fd5ddccef1e9c4294df3f1b749d059f20811590","isMergeCommit":true,"messageTitle":"Merge pull request #77 from imaginarys96/master","messageBody":"Implemented SummaryCommand","fileTypesAndContributionMap":{}},{"hash":"e9872b87ea07ed2f4cfae8208a6b7b9c85b19f80","isMergeCommit":false,"messageTitle":"reordered help command in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":55,"deletions":55}}},{"hash":"4c5d7b7b18fb4ddc69c360e904b408a2dbf760d5","isMergeCommit":true,"messageTitle":"Merge pull request #78 from imaginarys96/master","messageBody":"reordered help command in UserGuide","fileTypesAndContributionMap":{}},{"hash":"8dfcebc71e11c422e383ebe2a57adf7c36d807a3","isMergeCommit":false,"messageTitle":"reordered table of contents in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7f53d8a203e66ce0c1ce0ff7df0065910b5995cc","isMergeCommit":true,"messageTitle":"Merge pull request #79 from imaginarys96/master","messageBody":"reordered table of contents in UserGuide","fileTypesAndContributionMap":{}}]}],"woodenclock":[{"date":"2023-10-04","commitResults":[{"hash":"773a8e43cb56142c5789ca6965e4db2986c5c57f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-09","commitResults":[{"hash":"6077ba4a23bd1b9fc1e50fa53e3b872be5b6eb1e","isMergeCommit":false,"messageTitle":"Create AboutUs branch and leesungmin.md portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}},{"hash":"a37fa65ccb6a1b62dfab0eb6f3457341f6d818fc","isMergeCommit":false,"messageTitle":"Update READ.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}},{"hash":"c2fcafd4f8451047de38b018df37b1fe9c6f480a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from woodenclock/LeeSungmin-AboutUs","messageBody":"Create AboutUs branch and leesungmin.md portfolio","fileTypesAndContributionMap":{}},{"hash":"3e9aca38ae0e03fd4a8ae621146d083c45409027","isMergeCommit":true,"messageTitle":"Merge branch \u0027LeeSungmin-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2d4101597f24823b23a9a5ef502aef5397288f1c","isMergeCommit":false,"messageTitle":"Rename Duke.java to WildWatch.java as per out project name","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"1abb04b6249ec7daf5a386a21773f3ddb077ac18","isMergeCommit":false,"messageTitle":"Revert \"Rename Duke.java to WildWatch.java as per out project name\"","messageBody":"This reverts commit 2d4101597f24823b23a9a5ef502aef5397288f1c.\n","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"244abfa479dd4619a399297ac397592315e08604","isMergeCommit":false,"messageTitle":"Create abstract class Animal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":0}}},{"hash":"7663b3ecf3a8aa8aa508d8ca7edad59130e9c0eb","isMergeCommit":false,"messageTitle":"Rename project as WildWatch as per our project name","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":6,"deletions":6}}},{"hash":"b2e6806dddd0bf67b32c68655dd5236c7e9cc544","isMergeCommit":true,"messageTitle":"Merge pull request #4 from woodenclock/rename_project","messageBody":"Rename project from Duke to WildWatch as per our project name","fileTypesAndContributionMap":{}},{"hash":"c6242a7063a64aa4bb36350d575a875c50229edc","isMergeCommit":true,"messageTitle":"Merge branch \u0027rename_project\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a64a4c0cab96655ea728b5ac0f2f60751c8ed5a1","isMergeCommit":false,"messageTitle":"Create BootUp.java that contains welcome logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":77,"deletions":0}}},{"hash":"1f3d3b8c4fc84585d1699c43d127d4a36da01587","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":114,"deletions":76}}},{"hash":"fe6e136acc5d593d19301effc6cc5f2641e1947e","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"6c2cafbaba2f9bb015357d95eff4dfaa5f5c4a69","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":21}}},{"hash":"6cf1720e89934b3c61ab1c0d8db3a7e239eacd36","isMergeCommit":false,"messageTitle":"Update runtest.sh","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"b348ea5c36874f96a6b46c30290db939136d88fc","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"c4fb3ba9f397df9c3454cadc898b8829dd8553db","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"32d40d3e7e7046ccc3c3e596dc7c5b0b68073947","isMergeCommit":false,"messageTitle":"Update runtest.sh","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"bfd809b962a596b58a7fc24c27f6b244735c571b","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"936492bd4e993987c0bd1fcae321f3493ab4b91e","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"429d316db795b18efa841f79d94336cea4f40331","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"fd7bfa9b414fe7ee9bfb841d84703aaf82e6ce7c","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":133},"other":{"insertions":1,"deletions":1}}},{"hash":"97689efd86b84f8ee0b3497014aea9426286baaa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into bootup","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac3e8877e92b18280e3cd70bdadaf9310f81dff7","isMergeCommit":true,"messageTitle":"Merge pull request #6 from woodenclock/bootup","messageBody":"Update BootUp.java to fit within 120 wordline limit","fileTypesAndContributionMap":{}},{"hash":"c06e04b29d428439ccf8b280bd26d5482c96c8d3","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"31c6d46df982c3a0688f29f473887f21dc3ba1db","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":51}}},{"hash":"c6dff4fe86a6f3264235eadf60d8443e5e8f6a19","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/bootup\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"98d77c185330d024cf1a480c1d16eb5413f0f497","isMergeCommit":true,"messageTitle":"Merge branch \u0027bootup\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95b5f9b53ffbc9c55aa75f230a8746872f8bee4c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/bootup\u0027 into bootup","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9f4548643bc946e1e5906276338a280796b2cef9","isMergeCommit":false,"messageTitle":"Update project structure","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":39}}},{"hash":"e5a87bbe89f4a01b708f0f3327d195415909489c","isMergeCommit":true,"messageTitle":"Merge branch \u0027bootup\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"987dc591619e7c1b4cd557c06e21f6a68d607a4a","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"a5c52684a404e5205c5674689e949f782d79811c","isMergeCommit":false,"messageTitle":"Update BootUp.java to conform to coding quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1f17fcaa275038ea365d6759055ab33f6c31e9aa","isMergeCommit":true,"messageTitle":"Merge pull request #12 from woodenclock/bootup","messageBody":"Update project structure","fileTypesAndContributionMap":{}},{"hash":"7145784bb155b969e48ff7e7010ea4c97c2aae75","isMergeCommit":false,"messageTitle":"Create Entry class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":2}}},{"hash":"f03352d7d7f269e18a0591384ba5a3c7cc4eb55a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":8}}},{"hash":"96ac3b11547e3b2d2d4c6e14bdf22fd36aa76bba","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into entry","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5dac1732ee34244d4e59bf099e9261501710087d","isMergeCommit":true,"messageTitle":"Merge pull request #13 from woodenclock/entry","messageBody":"Create Entry class","fileTypesAndContributionMap":{}},{"hash":"945347d04572d7a9a11413580262329c992f14a5","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":2},"test-code":{"insertions":4,"deletions":2}}},{"hash":"3b7a601cd1b53fc7be7a2d1bedc42310cf1649e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into test","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"be05363bad21706e61fab277cea8f999e2782b07","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"2e019b43aa866ada15a4ed25cd3d7885ac10cc4a","isMergeCommit":false,"messageTitle":"Create EntryList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"6d3073813fb40e7d90e3ab589849963683e1189a","isMergeCommit":true,"messageTitle":"Merge pull request #14 from woodenclock/test","messageBody":"Update WildWatchTest.java","fileTypesAndContributionMap":{}},{"hash":"f774cc61af7a812a27a5b8886299f5f7b1f8868d","isMergeCommit":true,"messageTitle":"Merge pull request #15 from woodenclock/entry-list","messageBody":"Create EntryList class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"fb23536d544f38c73460e96a5c8bd313abdf0871","isMergeCommit":false,"messageTitle":"Update Main.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"38254679c1a734c325e5dab8dcf333beef508b93","isMergeCommit":false,"messageTitle":"Update Entry","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":4}}},{"hash":"a3e6c2fd82eac65ab404abed9a60af89969b3303","isMergeCommit":true,"messageTitle":"Merge branch \u0027test\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1bade08d80d0e3eedb5160168e9cb74b4927402d","isMergeCommit":true,"messageTitle":"Merge branch \u0027entry-list\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d0e3391ae33de9f5e0a565830ac98df6cc4f313f","isMergeCommit":true,"messageTitle":"Merge branch \u0027entry\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4ee7626d1bc4413bf1ddef578903135c52b31969","isMergeCommit":false,"messageTitle":"Update runtest.sh","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":1}}},{"hash":"9e1e349dc0473c94c82979f9b4205f2c7a5a2a0f","isMergeCommit":true,"messageTitle":"Merge pull request #17 from woodenclock/master","messageBody":"Update Main.java","fileTypesAndContributionMap":{}},{"hash":"641b2c736ec355c3848f2cbcbb041dc8338c9f26","isMergeCommit":false,"messageTitle":"Update Main.java to show welcome logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"77fe5541e59e37f74e72d91231d710d0ed696be1","isMergeCommit":false,"messageTitle":"Update Welcome Logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":13},"other":{"insertions":1,"deletions":1}}},{"hash":"6ea49076bd57c39603afcf927bf16466cdace61a","isMergeCommit":true,"messageTitle":"Merge pull request #18 from woodenclock/master","messageBody":"Update Main.java to show welcome logo","fileTypesAndContributionMap":{}},{"hash":"68be8887d8efee36a1ef4f109533033482dcd242","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"c2a56a8ff200897cfb897a15b2667cf694316c48","isMergeCommit":false,"messageTitle":"Merge operatingsystem and operation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":58,"deletions":6},"other":{"insertions":1,"deletions":1}}},{"hash":"b9d4ec4398a5423e8ba4e6cff7a0e21b6703d2de","isMergeCommit":false,"messageTitle":"Create Help.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":1}}},{"hash":"139ddda6ac311b9fe600964084bedc30025b5c23","isMergeCommit":false,"messageTitle":"Create Ui.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":16}}},{"hash":"aa73f36ed0f867e9cc494712264bbcf74eb20acd","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"1b39f7d802f41be2b0972d434ac72ed2a5d174ea","isMergeCommit":false,"messageTitle":"Update Main.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":265,"deletions":12},"other":{"insertions":2,"deletions":2}}},{"hash":"2f5bb6fcc91de14d1cfdff6923d9cf4cbe8b586a","isMergeCommit":false,"messageTitle":"Rectify coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":7}}},{"hash":"3fe9e8732a78b643b213927cfc670a40841bc438","isMergeCommit":true,"messageTitle":"Merge pull request #19 from woodenclock/master","messageBody":"Update BootUp.java","fileTypesAndContributionMap":{}},{"hash":"768e729a01aa2ca563e5b753adfd4bb3fba53fe2","isMergeCommit":false,"messageTitle":"Create DateHandler.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":9}}},{"hash":"17a55f41fb4299dbafc4a11ce5132343f647ce8e","isMergeCommit":false,"messageTitle":"Update master","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":11}}},{"hash":"00f4e5be68faec38e3787643e978c85acd8a4140","isMergeCommit":false,"messageTitle":"Update DateHandler.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-12","commitResults":[{"hash":"854362b0cb347d3eef09cff390a2bc1ece81a933","isMergeCommit":false,"messageTitle":"Create UiTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":7},"test-code":{"insertions":23,"deletions":5}}},{"hash":"9219e532962e466897da973e62b635128a9537d7","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":1}}},{"hash":"000704a61d0cf556f3659838c9f483cf4dc327b9","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":2}}},{"hash":"3bd708d0dc25b88e7467f88ebf02c13d04fad21a","isMergeCommit":true,"messageTitle":"Merge pull request #24 from woodenclock/JUnit","messageBody":"Create DateHandler.java","fileTypesAndContributionMap":{}},{"hash":"9269539e2e1b215c6abe2ce8299598f2ac7bbfc9","isMergeCommit":false,"messageTitle":"Update master","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":9},"test-code":{"insertions":23,"deletions":1}}},{"hash":"ec828890f2b2e762697dc08f3c59345057a75d6b","isMergeCommit":false,"messageTitle":"Update JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"21885dd84c3a1eb10fc873bea34312d6cd5d3908","isMergeCommit":false,"messageTitle":"Create DateHandlerTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2},"test-code":{"insertions":45,"deletions":4}}},{"hash":"e62a99b83b1a86695fdd408c40fa647c6d55c395","isMergeCommit":false,"messageTitle":"Update JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"a42c135198681cfb760500a9fb570cf655900b15","isMergeCommit":false,"messageTitle":"Update JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":33}}},{"hash":"34c204943b75d986f3434990cc8a2a0d51785428","isMergeCommit":true,"messageTitle":"Merge pull request #26 from woodenclock/JUnit","messageBody":"Update JUnit Testing","fileTypesAndContributionMap":{}},{"hash":"f89a3376b6128b40c6fb6a0ac87ae67433c69718","isMergeCommit":false,"messageTitle":"Update master branch","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3},"test-code":{"insertions":30,"deletions":24}}}]},{"date":"2023-10-13","commitResults":[{"hash":"04bfb9cdcbb0e565b7728dff4ef37b9900ecaf01","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"c41766f63af1deec7f34501671e4ce7797dd8a7e","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0824e77a201a68175ae07a2bd651b9a28d77bfae","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"155b4a5313622cf619386de79dac55fd1e6511d2","isMergeCommit":false,"messageTitle":"Update Team","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":6}}}]},{"date":"2023-10-14","commitResults":[{"hash":"a6771c27f6f02e0b583eab8a6b8b084dc2e2b613","isMergeCommit":true,"messageTitle":"Merge pull request #30 from tangzhenen/DeleteCommand","messageBody":"Delete command ","fileTypesAndContributionMap":{}},{"hash":"66a8c9a6cd5cac707a4f960ee6afbc999ae363dd","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00c2201381e98033b496951aac6812238b46249b","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"7aa2d2e9e23cbaaa7c4d183901c9a80aeb4a050e","isMergeCommit":false,"messageTitle":"Delete docs/team/johndoe.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":6}}}]},{"date":"2023-10-15","commitResults":[{"hash":"d224fc9b93a7ab109c4bc7789325449fa98c4b31","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"610129370f63512b2b17ef46b9e9e9bba81ea8f2","isMergeCommit":false,"messageTitle":"Update ErrorHandler to be more defensive when handling invalid command input for delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":21}}},{"hash":"b0b42fe5a3c45ea96b5cb9f0231b763009ce75b1","isMergeCommit":false,"messageTitle":"Update Helper to HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":8},"other":{"insertions":2,"deletions":2}}},{"hash":"6fb4e2fce4321f4b3390687233fed35eaf984f33","isMergeCommit":true,"messageTitle":"Merge pull request #29 from woodenclock/master","messageBody":"Update docs/team","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"450da925b330879ecf333b82d2f23dd01f0ba7cf","isMergeCommit":true,"messageTitle":"Merge pull request #32 from lctxct/master","messageBody":"Add add command","fileTypesAndContributionMap":{}},{"hash":"cca01ddd9bafcd73bab5601d937d80176c768a4c","isMergeCommit":false,"messageTitle":"Add assertions for Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":10},"other":{"insertions":1,"deletions":0}}},{"hash":"be31165e3f29da49d974c06bfe456d9a86e14d5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"46279ea4c95f206dddb4e551a2e1dbe2db2adc83","isMergeCommit":false,"messageTitle":"Update error handling to be more resilient","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":19},"other":{"insertions":1,"deletions":1}}},{"hash":"7b23c414b16f87663f8d9ac8cbc379596256f30c","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":7}}},{"hash":"6bd0efebc07159b11dc261fff9f34374aba05eec","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":5}}},{"hash":"115693537e993d70f89024842dd6e170d584bf15","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"463587f2747ec71359e71c28e88259af383f0d2d","isMergeCommit":false,"messageTitle":"Update ErrorHandler.java to be more defensive","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"62cdd84658d7065539c5f991671b99913c12e384","isMergeCommit":false,"messageTitle":"Update Assertions and Logging for ErrorHandler.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":1}}},{"hash":"16b0525ef78374b54dc7b6b5e274909efef28325","isMergeCommit":true,"messageTitle":"Merge branch \u0027JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9bff5d167f55af981c3a47361f0ddd243349ef7e","isMergeCommit":false,"messageTitle":"Update gitignore","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"976434bb6d811e51a8be416ce003b805086dd8cc","isMergeCommit":true,"messageTitle":"Merge pull request #33 from woodenclock/JUnit","messageBody":"Add Assertions\u0026Logging for Parser.java \u0026 ErrorHandler.java","fileTypesAndContributionMap":{}},{"hash":"9cab20433568b43e3f97459a5abd399dc9d95fd6","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":4}}}]},{"date":"2023-10-18","commitResults":[{"hash":"1304354f67117f4b44f29fb50d395bff627f33ef","isMergeCommit":true,"messageTitle":"Merge pull request #35 from woodenclock/master","messageBody":"Create LogHandler.java","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"f2bf7121a54988b8aae718966e9936168a1f78c9","isMergeCommit":false,"messageTitle":"Update HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":26}}},{"hash":"a775e5d8540fe1662258e81878bde359b7389aab","isMergeCommit":true,"messageTitle":"Merge pull request #37 from lctxct/master","messageBody":"Trim add command attributes","fileTypesAndContributionMap":{}},{"hash":"517a582de13b8da9c01cb9560e57eeb9cb900e04","isMergeCommit":true,"messageTitle":"Merge pull request #38 from woodenclock/master","messageBody":"Update HelpCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"3ba93ef829aeb9749839687d188d1e98665dcaf1","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"88f1e79af130134d0e69cd5fc8ac3f4ee7ba4250","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1e3ece0f8c482bc9b9d69e58d5dfa1ec8bf9c719","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"4be4b3bc4c835b3f228e6664f56f7c45fc5b6929","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7afb1c9045252a235b022ba229fba2f424758d0d","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"a28bd140e9ef8dd83c307f1dd2cbaf6a85324c55","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":1}}},{"hash":"1452811275c11a608f8c8efecf997fffbe3fe359","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":2}}},{"hash":"6d645b691a546bc05707102ae2165ae79c140b68","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":0}}}]},{"date":"2023-10-22","commitResults":[{"hash":"931a82be6bb9716fce842f07f2a0634891c8d723","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fc1314dd5fd8272f25bb0f0c4062ab3ef124c3d4","isMergeCommit":false,"messageTitle":"Create FileHandler class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":262,"deletions":69},"other":{"insertions":24,"deletions":13}}},{"hash":"49953cd354913432aa4e3ae852bd71aa269bb5b2","isMergeCommit":false,"messageTitle":"Update to conform to coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":4}}},{"hash":"cdf125e1beca7bb3a4063330b725d59205edc5b2","isMergeCommit":true,"messageTitle":"Merge pull request #43 from woodenclock/feature/file-handler","messageBody":"Create FileHandler class","fileTypesAndContributionMap":{}},{"hash":"b8b831fd2eee00070db0641f2d18c427da06ae7e","isMergeCommit":false,"messageTitle":"Update HandlerTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":46,"deletions":4}}}]},{"date":"2023-10-25","commitResults":[{"hash":"71c60292bc89991caef1a3695436d09286562b0e","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":132,"deletions":22}}},{"hash":"801e5200abe33a244de96df8786e2dbe7bfe8f46","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"de00a3076eb5eba44e4dcb92c1147683139bd577","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"a88ab74d5e7f56c212d229a48c3d1f69f4de57ad","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":8}}},{"hash":"8efa46d48a1f2460f950d0163096e1ed33dfb996","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":1}}},{"hash":"d62b0808a95f7e76fa753f360612e07f9e3104cd","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"70351e139f405fe75afebae3532b13cee21ac57f","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7212664e4176144796e87e3434f4ddd17759744d","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"999431233aacdb145349641f962902670d3956bc","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":13}}},{"hash":"8523bb7ed471238502b710348b84528fd6da0c94","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"6300da7aa03d3bd34ee1cef1ac57da6cd146ee0e","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"79ec23b44f524a07a16aa79097b4a71d4d5a361c","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"73c201d8f89d41325b3a74d623526c2b59ee31ee","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":7}}},{"hash":"fa7c26d503410ebeed06981e77762afd8973d192","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"1c91472ae7643a1e14d269f55a9b64be4e5b32d9","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"9e9fd85fe63e51e4f72921b8e924a9f22962e1e8","isMergeCommit":true,"messageTitle":"Merge pull request #44 from lctxct/decouple-filehandler","messageBody":"Decouple filehandler","fileTypesAndContributionMap":{}},{"hash":"9113b6d5796af11bb360ce27272ce4a43233193a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1b69d279c88f149ead8710f208e350f538cb7a7d","isMergeCommit":false,"messageTitle":"Decouple the InputHandler class from EntryHandler class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":47},"test-code":{"insertions":15,"deletions":33}}},{"hash":"2855de5b8de26166236c54831261d772078f2896","isMergeCommit":false,"messageTitle":"Create FindComamand Operation class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":78,"deletions":3}}},{"hash":"f9c00b1fc91dabeaea48bcf7b66939df2a5cadc0","isMergeCommit":false,"messageTitle":"Fixed bug in FindCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":7}}},{"hash":"a2fef8e3b29c5a04fbe63d90fbef45e22fb3039d","isMergeCommit":false,"messageTitle":"Update to conform to coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"4dcafe9b3f12f35844fdae882657ff74e7ff973c","isMergeCommit":false,"messageTitle":"Delete EntryHandlerTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":35}}},{"hash":"4d2cf0c635b94b39afd5686685817389a8f7a11f","isMergeCommit":true,"messageTitle":"Merge pull request #45 from woodenclock/master","messageBody":"Decouple the InputHandler class from EntryHandler class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"d1790785abfc81cd517c6a30ae354f83829f31b3","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"f14878ef43b32d4f6ace8902a325b3d0f673cc65","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"fc7c5b14c74f279c9949f6a0c75adbd57fe64add","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"ef087c4e7da75d66c8ddb2bfe7fdbb7fbc43fc85","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":4}}},{"hash":"594921c73d45b19c90ee33995dacd59893d330c9","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"e4a22d783560b1ed2f05ce2d7475a1de8240abdc","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"5a1e50d52da7261382aaf1afff40e2dd41dd18b6","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"9d8b5f5499e762f794e8e4a9546a3ab5abac8c64","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b1a6375766d87c2cb0ee8f581008919daf1597fb","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1e48ee6e8ccb0f62d4986a65d48f952d5abc08ad","isMergeCommit":false,"messageTitle":"Update FindCommand.java, erased print used for debugging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"5bc23eba9fb6ccbf703de844153e9d8a70326f49","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"2aabe5252b8721b13c6f1bc01343f366c7d4bba0","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"5b144293727c9669eef4fb7a3fb130262de7dc77","isMergeCommit":true,"messageTitle":"Merge pull request #47 from woodenclock/master","messageBody":"Update FindCommand.java, erased print used for debugging","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"57ea655be0101904e4e4896a56d269eb269d5659","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9d5948c7728238f746ab462036e8e7228052fd03","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"c91cdfa7f37882e01a42b7c55cc1cd84bbc75bee","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}},{"hash":"e8a7f527f27279ffc60b7044e6c6490253813216","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"2d94603aaf7ac8b4268f03c0727a9f069f989d45","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"16a5a67761528c9b8fbe8648b51df1ff88e64704","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"74787f82bda0e7105cf06e16571b87d8dbf03b55","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-28","commitResults":[{"hash":"6ce9fbaa24fdd842c8f291108986b2deac66553a","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":8}}},{"hash":"eb0321b813089f0868700ccc31bb5438385f7ce7","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"d80b65a2c7a0e70d829823382e7b7a7c3e36cde2","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":22}}}]},{"date":"2023-10-29","commitResults":[{"hash":"ce4fcce49515f712cf651b6eecbb20dd61571cef","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":1}}}]}],"tangzhenen":[{"date":"2023-10-13","commitResults":[{"hash":"533b7989a5a1ab5bb5320352563ef8ec26703a36","isMergeCommit":false,"messageTitle":"Add delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":4}}},{"hash":"5a8687f571cd1e27f76be6509dbe561301672ebf","isMergeCommit":false,"messageTitle":"Update entry list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"972d977c09e7acc98f20d0f7126538392192348f","isMergeCommit":false,"messageTitle":"Update Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"3d2b111b51993622d4ee5a3533f64719aa479814","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":2}}},{"hash":"3294660fadf18a4228e61b926bdb7d1374e63746","isMergeCommit":false,"messageTitle":"Bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]}],"lctxct":[{"date":"2023-10-16","commitResults":[{"hash":"c0a6facf1ef9e936416052a7d76eaf23255016fd","isMergeCommit":false,"messageTitle":"Add add command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":5}}},{"hash":"632e790bd87588b55a753b76eaaf7d4dccb54216","isMergeCommit":false,"messageTitle":"Fix checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2}}},{"hash":"4b26b50b548553c814feb4174ddda85dc03134fb","isMergeCommit":false,"messageTitle":"Fix thrown exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"b61c4261525cf634b900f427e7ef9b882f00385a","isMergeCommit":false,"messageTitle":"Fix cause of date exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"bc517ce6a252ddf3a72742a4fb8ed074cc1edbfa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:lctxct/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"865340925053b521b9d91c616f26fbc04a762ba5","isMergeCommit":false,"messageTitle":"Decouple filehandler functions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":17}}},{"hash":"11d6042e07a6939cee64533690875a2366deb6c3","isMergeCommit":false,"messageTitle":"Move EntryHandler to main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-28","commitResults":[{"hash":"4394a0a78505bbb5df96ce7ff8c65e79b82cdcbc","isMergeCommit":false,"messageTitle":"Add input prompt","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"9a546b130db55a07862cad1fe776d47c1896a346","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":3}}},{"hash":"71f0a2f9adea67936991bdb756b5b4812194ec27","isMergeCommit":true,"messageTitle":"Merge pull request #84 from lctxct/add-input-prompt","messageBody":"Add input prompt","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"7566680d6432f1327c9d79e97e0fce1256f94c50","isMergeCommit":false,"messageTitle":"Modify save file formatting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":13}}},{"hash":"59f0c98600743012db13cf717d528911d49e6c87","isMergeCommit":true,"messageTitle":"Merge pull request #85 from lctxct/modify-entry-loading","messageBody":"Modify save file formatting","fileTypesAndContributionMap":{}},{"hash":"7de3fcd9415ac19f9d1ca2b45d46eebdd6e02412","isMergeCommit":false,"messageTitle":"Update to use COMMAND_WORDs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":20}}},{"hash":"8331f9b1703d24dba16d1b68cc2d6ac016086694","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"580d519c695345b4e2e4dd3bd07726093db4e73e","isMergeCommit":true,"messageTitle":"Merge pull request #86 from lctxct/add-commandwords","messageBody":"Update to use COMMAND_WORDs","fileTypesAndContributionMap":{}},{"hash":"f90e278dc3d2f920b189e66bf9b80d86cf2c0479","isMergeCommit":false,"messageTitle":"Add execute()s to commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":25}}},{"hash":"fa1e3af7807c5828627b64414f4234ab6df87908","isMergeCommit":true,"messageTitle":"Merge pull request #87 from lctxct/add-command-execute","messageBody":"Add execute()s to commands","fileTypesAndContributionMap":{}},{"hash":"314155a753a8959dc53f40c2b0301b55f4849166","isMergeCommit":false,"messageTitle":"Move routing functionality to EntryHandler","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":41,"deletions":24}}},{"hash":"04b5df6d75fb2be3b92ae02d90f8395b6667ae16","isMergeCommit":true,"messageTitle":"Merge pull request #88 from lctxct/improve-command-routing","messageBody":"Move routing functionality to EntryHandler","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"imaginarys96":{"docs":55,"functional-code":102,"test-code":0},"woodenclock":{"docs":156,"functional-code":760,"test-code":22,"other":6},"tangzhenen":{"docs":0,"functional-code":14,"test-code":0},"lctxct":{"docs":0,"functional-code":238,"test-code":0}},"authorContributionVariance":{"imaginarys96":1158.881,"woodenclock":37240.72,"tangzhenen":51.88711,"lctxct":1725.1807},"authorDisplayNameMap":{"imaginarys96":"CS2113T-W11-2 YANG..REMY","woodenclock":"CS2113T-W11-2 LEE ..GMIN","tangzhenen":"CS2113T-W11-2 TANG..N EN","lctxct":"CS2113T-W11-2 LIEN..TING"}} +{"authorDailyContributionsMap":{"imaginarys96":[{"date":"2023-10-14","commitResults":[{"hash":"ec58ce88cfc6d13389719ba5c71f25eca9a9a801","isMergeCommit":false,"messageTitle":"Updated help command for v1 features - help, add, list, delete","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":43}}},{"hash":"bf15d755cbc672977eb38b6001162424834580fc","isMergeCommit":true,"messageTitle":"Merge pull request #31 from imaginarys96/master","messageBody":"Updated help command for v1 features - help, add, list, delete","fileTypesAndContributionMap":{}}]},{"date":"2023-10-28","commitResults":[{"hash":"d99f0c79eee52e1af97c186c829392ef8e30f8aa","isMergeCommit":false,"messageTitle":"Implemented SummaryCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":80,"deletions":4}}},{"hash":"5fd5ddccef1e9c4294df3f1b749d059f20811590","isMergeCommit":true,"messageTitle":"Merge pull request #77 from imaginarys96/master","messageBody":"Implemented SummaryCommand","fileTypesAndContributionMap":{}},{"hash":"e9872b87ea07ed2f4cfae8208a6b7b9c85b19f80","isMergeCommit":false,"messageTitle":"reordered help command in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":55,"deletions":55}}},{"hash":"4c5d7b7b18fb4ddc69c360e904b408a2dbf760d5","isMergeCommit":true,"messageTitle":"Merge pull request #78 from imaginarys96/master","messageBody":"reordered help command in UserGuide","fileTypesAndContributionMap":{}},{"hash":"8dfcebc71e11c422e383ebe2a57adf7c36d807a3","isMergeCommit":false,"messageTitle":"reordered table of contents in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7f53d8a203e66ce0c1ce0ff7df0065910b5995cc","isMergeCommit":true,"messageTitle":"Merge pull request #79 from imaginarys96/master","messageBody":"reordered table of contents in UserGuide","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"b2370db38fdd6b8d98b86c2367444f6337266906","isMergeCommit":false,"messageTitle":"Implemented EditCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":93,"deletions":9}}},{"hash":"fa22d1545a218794419f1d0a67cec37502a5d8bd","isMergeCommit":false,"messageTitle":"Updated UserGuide to include summary and edit commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"docs":{"insertions":60,"deletions":7}}},{"hash":"6cdbd2c30fdeef268e33fb981ecd3b576b3b2d3b","isMergeCommit":true,"messageTitle":"Merge pull request #89 from imaginarys96/master","messageBody":"Added `edit` command, updated UserGuide to include `edit` and `summary` commands","fileTypesAndContributionMap":{}},{"hash":"b26d8338e0a7b492c5168c089f28059631573218","isMergeCommit":false,"messageTitle":"fix gradle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":5}}},{"hash":"7ea0fc9a05bd1bf0189f19626dcf36b60f769d6f","isMergeCommit":true,"messageTitle":"Merge pull request #91 from imaginarys96/master","messageBody":"fix gradle errors","fileTypesAndContributionMap":{}},{"hash":"5c47056fa698a2c75cc2089a9ee983c81a3acacb","isMergeCommit":false,"messageTitle":"added edit, summary table of contents to include link to github pages. updated FAQ to have Q\u0026A on separate lines","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":4}}},{"hash":"144e360d92e10d6eadfd15dab9e913ca17060554","isMergeCommit":true,"messageTitle":"Merge pull request #92 from imaginarys96/master","messageBody":"added edit, summary table of contents to include link to github pages…","fileTypesAndContributionMap":{}}]}],"woodenclock":[{"date":"2023-10-04","commitResults":[{"hash":"773a8e43cb56142c5789ca6965e4db2986c5c57f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-09","commitResults":[{"hash":"6077ba4a23bd1b9fc1e50fa53e3b872be5b6eb1e","isMergeCommit":false,"messageTitle":"Create AboutUs branch and leesungmin.md portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}},{"hash":"a37fa65ccb6a1b62dfab0eb6f3457341f6d818fc","isMergeCommit":false,"messageTitle":"Update READ.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}},{"hash":"c2fcafd4f8451047de38b018df37b1fe9c6f480a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from woodenclock/LeeSungmin-AboutUs","messageBody":"Create AboutUs branch and leesungmin.md portfolio","fileTypesAndContributionMap":{}},{"hash":"3e9aca38ae0e03fd4a8ae621146d083c45409027","isMergeCommit":true,"messageTitle":"Merge branch \u0027LeeSungmin-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2d4101597f24823b23a9a5ef502aef5397288f1c","isMergeCommit":false,"messageTitle":"Rename Duke.java to WildWatch.java as per out project name","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"1abb04b6249ec7daf5a386a21773f3ddb077ac18","isMergeCommit":false,"messageTitle":"Revert \"Rename Duke.java to WildWatch.java as per out project name\"","messageBody":"This reverts commit 2d4101597f24823b23a9a5ef502aef5397288f1c.\n","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"244abfa479dd4619a399297ac397592315e08604","isMergeCommit":false,"messageTitle":"Create abstract class Animal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":0}}},{"hash":"7663b3ecf3a8aa8aa508d8ca7edad59130e9c0eb","isMergeCommit":false,"messageTitle":"Rename project as WildWatch as per our project name","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":6,"deletions":6}}},{"hash":"b2e6806dddd0bf67b32c68655dd5236c7e9cc544","isMergeCommit":true,"messageTitle":"Merge pull request #4 from woodenclock/rename_project","messageBody":"Rename project from Duke to WildWatch as per our project name","fileTypesAndContributionMap":{}},{"hash":"c6242a7063a64aa4bb36350d575a875c50229edc","isMergeCommit":true,"messageTitle":"Merge branch \u0027rename_project\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a64a4c0cab96655ea728b5ac0f2f60751c8ed5a1","isMergeCommit":false,"messageTitle":"Create BootUp.java that contains welcome logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":77,"deletions":0}}},{"hash":"1f3d3b8c4fc84585d1699c43d127d4a36da01587","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":114,"deletions":76}}},{"hash":"fe6e136acc5d593d19301effc6cc5f2641e1947e","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"6c2cafbaba2f9bb015357d95eff4dfaa5f5c4a69","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":21}}},{"hash":"6cf1720e89934b3c61ab1c0d8db3a7e239eacd36","isMergeCommit":false,"messageTitle":"Update runtest.sh","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"b348ea5c36874f96a6b46c30290db939136d88fc","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"c4fb3ba9f397df9c3454cadc898b8829dd8553db","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"32d40d3e7e7046ccc3c3e596dc7c5b0b68073947","isMergeCommit":false,"messageTitle":"Update runtest.sh","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"bfd809b962a596b58a7fc24c27f6b244735c571b","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"936492bd4e993987c0bd1fcae321f3493ab4b91e","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"429d316db795b18efa841f79d94336cea4f40331","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"fd7bfa9b414fe7ee9bfb841d84703aaf82e6ce7c","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":133},"other":{"insertions":1,"deletions":1}}},{"hash":"97689efd86b84f8ee0b3497014aea9426286baaa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into bootup","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac3e8877e92b18280e3cd70bdadaf9310f81dff7","isMergeCommit":true,"messageTitle":"Merge pull request #6 from woodenclock/bootup","messageBody":"Update BootUp.java to fit within 120 wordline limit","fileTypesAndContributionMap":{}},{"hash":"c06e04b29d428439ccf8b280bd26d5482c96c8d3","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"31c6d46df982c3a0688f29f473887f21dc3ba1db","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":51}}},{"hash":"c6dff4fe86a6f3264235eadf60d8443e5e8f6a19","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/bootup\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"98d77c185330d024cf1a480c1d16eb5413f0f497","isMergeCommit":true,"messageTitle":"Merge branch \u0027bootup\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"95b5f9b53ffbc9c55aa75f230a8746872f8bee4c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/bootup\u0027 into bootup","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9f4548643bc946e1e5906276338a280796b2cef9","isMergeCommit":false,"messageTitle":"Update project structure","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":39}}},{"hash":"e5a87bbe89f4a01b708f0f3327d195415909489c","isMergeCommit":true,"messageTitle":"Merge branch \u0027bootup\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"987dc591619e7c1b4cd557c06e21f6a68d607a4a","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"a5c52684a404e5205c5674689e949f782d79811c","isMergeCommit":false,"messageTitle":"Update BootUp.java to conform to coding quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1f17fcaa275038ea365d6759055ab33f6c31e9aa","isMergeCommit":true,"messageTitle":"Merge pull request #12 from woodenclock/bootup","messageBody":"Update project structure","fileTypesAndContributionMap":{}},{"hash":"7145784bb155b969e48ff7e7010ea4c97c2aae75","isMergeCommit":false,"messageTitle":"Create Entry class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":2}}},{"hash":"f03352d7d7f269e18a0591384ba5a3c7cc4eb55a","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":8}}},{"hash":"96ac3b11547e3b2d2d4c6e14bdf22fd36aa76bba","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into entry","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5dac1732ee34244d4e59bf099e9261501710087d","isMergeCommit":true,"messageTitle":"Merge pull request #13 from woodenclock/entry","messageBody":"Create Entry class","fileTypesAndContributionMap":{}},{"hash":"945347d04572d7a9a11413580262329c992f14a5","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":2},"test-code":{"insertions":4,"deletions":2}}},{"hash":"3b7a601cd1b53fc7be7a2d1bedc42310cf1649e1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into test","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"be05363bad21706e61fab277cea8f999e2782b07","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"2e019b43aa866ada15a4ed25cd3d7885ac10cc4a","isMergeCommit":false,"messageTitle":"Create EntryList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"6d3073813fb40e7d90e3ab589849963683e1189a","isMergeCommit":true,"messageTitle":"Merge pull request #14 from woodenclock/test","messageBody":"Update WildWatchTest.java","fileTypesAndContributionMap":{}},{"hash":"f774cc61af7a812a27a5b8886299f5f7b1f8868d","isMergeCommit":true,"messageTitle":"Merge pull request #15 from woodenclock/entry-list","messageBody":"Create EntryList class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"fb23536d544f38c73460e96a5c8bd313abdf0871","isMergeCommit":false,"messageTitle":"Update Main.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"38254679c1a734c325e5dab8dcf333beef508b93","isMergeCommit":false,"messageTitle":"Update Entry","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":4}}},{"hash":"a3e6c2fd82eac65ab404abed9a60af89969b3303","isMergeCommit":true,"messageTitle":"Merge branch \u0027test\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1bade08d80d0e3eedb5160168e9cb74b4927402d","isMergeCommit":true,"messageTitle":"Merge branch \u0027entry-list\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d0e3391ae33de9f5e0a565830ac98df6cc4f313f","isMergeCommit":true,"messageTitle":"Merge branch \u0027entry\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4ee7626d1bc4413bf1ddef578903135c52b31969","isMergeCommit":false,"messageTitle":"Update runtest.sh","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":1}}},{"hash":"9e1e349dc0473c94c82979f9b4205f2c7a5a2a0f","isMergeCommit":true,"messageTitle":"Merge pull request #17 from woodenclock/master","messageBody":"Update Main.java","fileTypesAndContributionMap":{}},{"hash":"641b2c736ec355c3848f2cbcbb041dc8338c9f26","isMergeCommit":false,"messageTitle":"Update Main.java to show welcome logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"77fe5541e59e37f74e72d91231d710d0ed696be1","isMergeCommit":false,"messageTitle":"Update Welcome Logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":13},"other":{"insertions":1,"deletions":1}}},{"hash":"6ea49076bd57c39603afcf927bf16466cdace61a","isMergeCommit":true,"messageTitle":"Merge pull request #18 from woodenclock/master","messageBody":"Update Main.java to show welcome logo","fileTypesAndContributionMap":{}},{"hash":"68be8887d8efee36a1ef4f109533033482dcd242","isMergeCommit":false,"messageTitle":"Update BootUp.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"c2a56a8ff200897cfb897a15b2667cf694316c48","isMergeCommit":false,"messageTitle":"Merge operatingsystem and operation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":58,"deletions":6},"other":{"insertions":1,"deletions":1}}},{"hash":"b9d4ec4398a5423e8ba4e6cff7a0e21b6703d2de","isMergeCommit":false,"messageTitle":"Create Help.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":1}}},{"hash":"139ddda6ac311b9fe600964084bedc30025b5c23","isMergeCommit":false,"messageTitle":"Create Ui.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":16}}},{"hash":"aa73f36ed0f867e9cc494712264bbcf74eb20acd","isMergeCommit":false,"messageTitle":"Update runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"1b39f7d802f41be2b0972d434ac72ed2a5d174ea","isMergeCommit":false,"messageTitle":"Update Main.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":265,"deletions":12},"other":{"insertions":2,"deletions":2}}},{"hash":"2f5bb6fcc91de14d1cfdff6923d9cf4cbe8b586a","isMergeCommit":false,"messageTitle":"Rectify coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":7}}},{"hash":"3fe9e8732a78b643b213927cfc670a40841bc438","isMergeCommit":true,"messageTitle":"Merge pull request #19 from woodenclock/master","messageBody":"Update BootUp.java","fileTypesAndContributionMap":{}},{"hash":"768e729a01aa2ca563e5b753adfd4bb3fba53fe2","isMergeCommit":false,"messageTitle":"Create DateHandler.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":9}}},{"hash":"17a55f41fb4299dbafc4a11ce5132343f647ce8e","isMergeCommit":false,"messageTitle":"Update master","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":11}}},{"hash":"00f4e5be68faec38e3787643e978c85acd8a4140","isMergeCommit":false,"messageTitle":"Update DateHandler.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-12","commitResults":[{"hash":"854362b0cb347d3eef09cff390a2bc1ece81a933","isMergeCommit":false,"messageTitle":"Create UiTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":7},"test-code":{"insertions":23,"deletions":5}}},{"hash":"9219e532962e466897da973e62b635128a9537d7","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":1}}},{"hash":"000704a61d0cf556f3659838c9f483cf4dc327b9","isMergeCommit":false,"messageTitle":"Update WildWatchTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":2}}},{"hash":"3bd708d0dc25b88e7467f88ebf02c13d04fad21a","isMergeCommit":true,"messageTitle":"Merge pull request #24 from woodenclock/JUnit","messageBody":"Create DateHandler.java","fileTypesAndContributionMap":{}},{"hash":"9269539e2e1b215c6abe2ce8299598f2ac7bbfc9","isMergeCommit":false,"messageTitle":"Update master","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":9},"test-code":{"insertions":23,"deletions":1}}},{"hash":"ec828890f2b2e762697dc08f3c59345057a75d6b","isMergeCommit":false,"messageTitle":"Update JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"21885dd84c3a1eb10fc873bea34312d6cd5d3908","isMergeCommit":false,"messageTitle":"Create DateHandlerTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2},"test-code":{"insertions":45,"deletions":4}}},{"hash":"e62a99b83b1a86695fdd408c40fa647c6d55c395","isMergeCommit":false,"messageTitle":"Update JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"a42c135198681cfb760500a9fb570cf655900b15","isMergeCommit":false,"messageTitle":"Update JUnit Testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":33}}},{"hash":"34c204943b75d986f3434990cc8a2a0d51785428","isMergeCommit":true,"messageTitle":"Merge pull request #26 from woodenclock/JUnit","messageBody":"Update JUnit Testing","fileTypesAndContributionMap":{}},{"hash":"f89a3376b6128b40c6fb6a0ac87ae67433c69718","isMergeCommit":false,"messageTitle":"Update master branch","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3},"test-code":{"insertions":30,"deletions":24}}}]},{"date":"2023-10-13","commitResults":[{"hash":"04bfb9cdcbb0e565b7728dff4ef37b9900ecaf01","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"c41766f63af1deec7f34501671e4ce7797dd8a7e","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0824e77a201a68175ae07a2bd651b9a28d77bfae","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"155b4a5313622cf619386de79dac55fd1e6511d2","isMergeCommit":false,"messageTitle":"Update Team","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":6}}}]},{"date":"2023-10-14","commitResults":[{"hash":"a6771c27f6f02e0b583eab8a6b8b084dc2e2b613","isMergeCommit":true,"messageTitle":"Merge pull request #30 from tangzhenen/DeleteCommand","messageBody":"Delete command ","fileTypesAndContributionMap":{}},{"hash":"66a8c9a6cd5cac707a4f960ee6afbc999ae363dd","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00c2201381e98033b496951aac6812238b46249b","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"7aa2d2e9e23cbaaa7c4d183901c9a80aeb4a050e","isMergeCommit":false,"messageTitle":"Delete docs/team/johndoe.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":6}}}]},{"date":"2023-10-15","commitResults":[{"hash":"d224fc9b93a7ab109c4bc7789325449fa98c4b31","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"610129370f63512b2b17ef46b9e9e9bba81ea8f2","isMergeCommit":false,"messageTitle":"Update ErrorHandler to be more defensive when handling invalid command input for delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":21}}},{"hash":"b0b42fe5a3c45ea96b5cb9f0231b763009ce75b1","isMergeCommit":false,"messageTitle":"Update Helper to HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":8},"other":{"insertions":2,"deletions":2}}},{"hash":"6fb4e2fce4321f4b3390687233fed35eaf984f33","isMergeCommit":true,"messageTitle":"Merge pull request #29 from woodenclock/master","messageBody":"Update docs/team","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"450da925b330879ecf333b82d2f23dd01f0ba7cf","isMergeCommit":true,"messageTitle":"Merge pull request #32 from lctxct/master","messageBody":"Add add command","fileTypesAndContributionMap":{}},{"hash":"cca01ddd9bafcd73bab5601d937d80176c768a4c","isMergeCommit":false,"messageTitle":"Add assertions for Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":10},"other":{"insertions":1,"deletions":0}}},{"hash":"be31165e3f29da49d974c06bfe456d9a86e14d5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"46279ea4c95f206dddb4e551a2e1dbe2db2adc83","isMergeCommit":false,"messageTitle":"Update error handling to be more resilient","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":19},"other":{"insertions":1,"deletions":1}}},{"hash":"7b23c414b16f87663f8d9ac8cbc379596256f30c","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":7}}},{"hash":"6bd0efebc07159b11dc261fff9f34374aba05eec","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":5}}},{"hash":"115693537e993d70f89024842dd6e170d584bf15","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"463587f2747ec71359e71c28e88259af383f0d2d","isMergeCommit":false,"messageTitle":"Update ErrorHandler.java to be more defensive","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"62cdd84658d7065539c5f991671b99913c12e384","isMergeCommit":false,"messageTitle":"Update Assertions and Logging for ErrorHandler.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":1}}},{"hash":"16b0525ef78374b54dc7b6b5e274909efef28325","isMergeCommit":true,"messageTitle":"Merge branch \u0027JUnit\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9bff5d167f55af981c3a47361f0ddd243349ef7e","isMergeCommit":false,"messageTitle":"Update gitignore","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"976434bb6d811e51a8be416ce003b805086dd8cc","isMergeCommit":true,"messageTitle":"Merge pull request #33 from woodenclock/JUnit","messageBody":"Add Assertions\u0026Logging for Parser.java \u0026 ErrorHandler.java","fileTypesAndContributionMap":{}},{"hash":"9cab20433568b43e3f97459a5abd399dc9d95fd6","isMergeCommit":false,"messageTitle":"Update to conform coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":4}}}]},{"date":"2023-10-18","commitResults":[{"hash":"1304354f67117f4b44f29fb50d395bff627f33ef","isMergeCommit":true,"messageTitle":"Merge pull request #35 from woodenclock/master","messageBody":"Create LogHandler.java","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"f2bf7121a54988b8aae718966e9936168a1f78c9","isMergeCommit":false,"messageTitle":"Update HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":26}}},{"hash":"a775e5d8540fe1662258e81878bde359b7389aab","isMergeCommit":true,"messageTitle":"Merge pull request #37 from lctxct/master","messageBody":"Trim add command attributes","fileTypesAndContributionMap":{}},{"hash":"517a582de13b8da9c01cb9560e57eeb9cb900e04","isMergeCommit":true,"messageTitle":"Merge pull request #38 from woodenclock/master","messageBody":"Update HelpCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"3ba93ef829aeb9749839687d188d1e98665dcaf1","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"88f1e79af130134d0e69cd5fc8ac3f4ee7ba4250","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1e3ece0f8c482bc9b9d69e58d5dfa1ec8bf9c719","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"4be4b3bc4c835b3f228e6664f56f7c45fc5b6929","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7afb1c9045252a235b022ba229fba2f424758d0d","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"a28bd140e9ef8dd83c307f1dd2cbaf6a85324c55","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":1}}},{"hash":"1452811275c11a608f8c8efecf997fffbe3fe359","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":2}}},{"hash":"6d645b691a546bc05707102ae2165ae79c140b68","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":0}}}]},{"date":"2023-10-22","commitResults":[{"hash":"931a82be6bb9716fce842f07f2a0634891c8d723","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fc1314dd5fd8272f25bb0f0c4062ab3ef124c3d4","isMergeCommit":false,"messageTitle":"Create FileHandler class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":262,"deletions":69},"other":{"insertions":24,"deletions":13}}},{"hash":"49953cd354913432aa4e3ae852bd71aa269bb5b2","isMergeCommit":false,"messageTitle":"Update to conform to coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":4}}},{"hash":"cdf125e1beca7bb3a4063330b725d59205edc5b2","isMergeCommit":true,"messageTitle":"Merge pull request #43 from woodenclock/feature/file-handler","messageBody":"Create FileHandler class","fileTypesAndContributionMap":{}},{"hash":"b8b831fd2eee00070db0641f2d18c427da06ae7e","isMergeCommit":false,"messageTitle":"Update HandlerTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":46,"deletions":4}}}]},{"date":"2023-10-25","commitResults":[{"hash":"71c60292bc89991caef1a3695436d09286562b0e","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":132,"deletions":22}}},{"hash":"801e5200abe33a244de96df8786e2dbe7bfe8f46","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"de00a3076eb5eba44e4dcb92c1147683139bd577","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"a88ab74d5e7f56c212d229a48c3d1f69f4de57ad","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":8}}},{"hash":"8efa46d48a1f2460f950d0163096e1ed33dfb996","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":1}}},{"hash":"d62b0808a95f7e76fa753f360612e07f9e3104cd","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"70351e139f405fe75afebae3532b13cee21ac57f","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7212664e4176144796e87e3434f4ddd17759744d","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"999431233aacdb145349641f962902670d3956bc","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":25,"deletions":13}}},{"hash":"8523bb7ed471238502b710348b84528fd6da0c94","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"6300da7aa03d3bd34ee1cef1ac57da6cd146ee0e","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"79ec23b44f524a07a16aa79097b4a71d4d5a361c","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"73c201d8f89d41325b3a74d623526c2b59ee31ee","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":7}}},{"hash":"fa7c26d503410ebeed06981e77762afd8973d192","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"1c91472ae7643a1e14d269f55a9b64be4e5b32d9","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"9e9fd85fe63e51e4f72921b8e924a9f22962e1e8","isMergeCommit":true,"messageTitle":"Merge pull request #44 from lctxct/decouple-filehandler","messageBody":"Decouple filehandler","fileTypesAndContributionMap":{}},{"hash":"9113b6d5796af11bb360ce27272ce4a43233193a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1b69d279c88f149ead8710f208e350f538cb7a7d","isMergeCommit":false,"messageTitle":"Decouple the InputHandler class from EntryHandler class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":47},"test-code":{"insertions":15,"deletions":33}}},{"hash":"2855de5b8de26166236c54831261d772078f2896","isMergeCommit":false,"messageTitle":"Create FindComamand Operation class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":78,"deletions":3}}},{"hash":"f9c00b1fc91dabeaea48bcf7b66939df2a5cadc0","isMergeCommit":false,"messageTitle":"Fixed bug in FindCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":7}}},{"hash":"a2fef8e3b29c5a04fbe63d90fbef45e22fb3039d","isMergeCommit":false,"messageTitle":"Update to conform to coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"4dcafe9b3f12f35844fdae882657ff74e7ff973c","isMergeCommit":false,"messageTitle":"Delete EntryHandlerTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":35}}},{"hash":"4d2cf0c635b94b39afd5686685817389a8f7a11f","isMergeCommit":true,"messageTitle":"Merge pull request #45 from woodenclock/master","messageBody":"Decouple the InputHandler class from EntryHandler class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-26","commitResults":[{"hash":"d1790785abfc81cd517c6a30ae354f83829f31b3","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"f14878ef43b32d4f6ace8902a325b3d0f673cc65","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"fc7c5b14c74f279c9949f6a0c75adbd57fe64add","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"ef087c4e7da75d66c8ddb2bfe7fdbb7fbc43fc85","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":4}}},{"hash":"594921c73d45b19c90ee33995dacd59893d330c9","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"e4a22d783560b1ed2f05ce2d7475a1de8240abdc","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"5a1e50d52da7261382aaf1afff40e2dd41dd18b6","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"9d8b5f5499e762f794e8e4a9546a3ab5abac8c64","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b1a6375766d87c2cb0ee8f581008919daf1597fb","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1e48ee6e8ccb0f62d4986a65d48f952d5abc08ad","isMergeCommit":false,"messageTitle":"Update FindCommand.java, erased print used for debugging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"5bc23eba9fb6ccbf703de844153e9d8a70326f49","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"2aabe5252b8721b13c6f1bc01343f366c7d4bba0","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"5b144293727c9669eef4fb7a3fb130262de7dc77","isMergeCommit":true,"messageTitle":"Merge pull request #47 from woodenclock/master","messageBody":"Update FindCommand.java, erased print used for debugging","fileTypesAndContributionMap":{}}]},{"date":"2023-10-27","commitResults":[{"hash":"57ea655be0101904e4e4896a56d269eb269d5659","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9d5948c7728238f746ab462036e8e7228052fd03","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"c91cdfa7f37882e01a42b7c55cc1cd84bbc75bee","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}},{"hash":"e8a7f527f27279ffc60b7044e6c6490253813216","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"2d94603aaf7ac8b4268f03c0727a9f069f989d45","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"16a5a67761528c9b8fbe8648b51df1ff88e64704","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"74787f82bda0e7105cf06e16571b87d8dbf03b55","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-28","commitResults":[{"hash":"6ce9fbaa24fdd842c8f291108986b2deac66553a","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":8}}},{"hash":"eb0321b813089f0868700ccc31bb5438385f7ce7","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"d80b65a2c7a0e70d829823382e7b7a7c3e36cde2","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":22}}}]},{"date":"2023-10-29","commitResults":[{"hash":"ce4fcce49515f712cf651b6eecbb20dd61571cef","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":1}}},{"hash":"611a90c0c6fd9da1d06889d18dbb296cdeac2c6b","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"2eac7e89b4fed923b03fcada875c4be390c53a60","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":3}}},{"hash":"a14b8b479b1006cc4d0aa7618e9a36324737a973","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}},{"hash":"181ad4cb23ddc381e4e2a29efc3bdb9c63a413e8","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e1080b16b1e920bbc2abb08d554b8ba251104dce","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":1}}},{"hash":"2597af2a2f0e64029f5480e4326f93117bbf6af5","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"2ae2724282d1109842a73b773892eb3a07e573ca","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":4}}},{"hash":"8d9383af337d9471ed9a049aab43bb8ac12c1aa7","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"060385fd1e89ec1a4729a5dbd533f1b9f4f608e4","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"073a4ec309a9d9008fdab4b5f106a50761797fed","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":71}}},{"hash":"a9eb2742b0b5f8cc3f8d284f714496f3b0fa9730","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"76bb482a8343fce5d1d158b0ce7e21f852a58141","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"2345e47ffc5eb68f8197b68a7b1665ed961835fb","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":14}}},{"hash":"e89f82832e022ae7c468b919e083722c59abebf2","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"50bdcd1c15c534c15a4eeaf9d8daa35f0a210426","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"6d81e802214fa27ed2d28e36f2d9ca53888ca912","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"6c00c908a887a0c8992443e7bdb240362efeb426","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"651039e21d0b65fe705af36b25f647e8fb56f054","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"70cc7886454dd7ba9a79eba19b4b8a56b9c9201f","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":1}}},{"hash":"58842c5494dc812495e8bbfe34d22d213114215c","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"9c6571ba3ce9c6ad1ec531daf4aecc56cb171351","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b01023f7a8aa1c8bb26f59ceb0103cb8e34b2456","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":2}}},{"hash":"72fb57b99c225cc3897679785e4efdec99ce5060","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":1}}},{"hash":"a947305e86c2914fa7875290926c682a676a485b","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"2f7520d069bfc07162a715eb4c3cb1d596122597","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"163f996f0404d39155c01eddbbced0794592605b","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":3}}},{"hash":"ac83aa125df999e0b0619336f401ca3fad7e5495","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1205b0fd11249db616a705a739936d38d5b8a02b","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"f35c6acfd6a7325d24e7eed72a409a83f412d5dc","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"df487785b54bf1a14003b3de8a1f1ef2fb8c37a2","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":3}}},{"hash":"f266228b0a2c6f7b009d15956cdd31ee930f0ffb","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"b59f34187079ec906132e0281e33061260c03259","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":3}}},{"hash":"6f268e710f65006826bf9e9aa6c114ad00e4b976","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"6eec5bad8d3db469c47df5c937821f6228a45e86","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e203ad818030487b48ff07d998aa4313a965d2bd","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":7}}},{"hash":"65d6b05a1cd59431924a51c1ab2c7aa5003cf731","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"93cccaccfec882329c3008f9cb3f86626b1e13d3","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":5}}},{"hash":"9ab358dea1759da20e17f6e69afa226a9ce3f4c0","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"59d29f98700b1c20d3bd76807074d011fc163c91","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"21adb7eb14887f7a43ad1fe69039db0627306e87","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}},{"hash":"8eb136dd8247e797cb702261f987fe5a55a0663f","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b0f714da3077dff001078572afa19c6105538437","isMergeCommit":false,"messageTitle":"Create ByeCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"test-code":{"insertions":0,"deletions":0}}},{"hash":"a853fe4ad9734a26cd67884fcf2edbbd604ddf82","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":2}}},{"hash":"7578737d271c9ff421224e23b2de063bc8cbd1f5","isMergeCommit":false,"messageTitle":"Update leesungmin.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"87aaf65189640f6b9b97ce46d2e133a0d4626713","isMergeCommit":false,"messageTitle":"Delete ByeCommandTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":7},"test-code":{"insertions":0,"deletions":0}}},{"hash":"1b3cffa905b350db82491dfae33c8535d5e56530","isMergeCommit":true,"messageTitle":"Merge pull request #96 from woodenclock/master","messageBody":"Create ByeCommandTest.java","fileTypesAndContributionMap":{}},{"hash":"d8ab73416e2eead55c3bb2d0229df9bdd86d707f","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}},{"hash":"b4eb9042ebebf577e7d91ae043a9e4515b90256e","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9872e9287dfacb27feb7ff47d5102e5abb54873a","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"5549e41d14b7ed410337651d7180e6bb68156cea","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":41,"deletions":12}}},{"hash":"57f7664df8c710b8732bfd7bc8deb3b37a743631","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"9af0aa0b63b439cd2d603ea8ff478881814a853d","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":19}}},{"hash":"25889acdac7630a56075f0afe7249a8492279445","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":3}}},{"hash":"384b78c6a79bcba376d376e84b096cca7d540806","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"19ae2556bccf3f607148d54a17387e6a2b72a3fa","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a8bbfe87e249d519ddb832ca7f5619a1ebc9ffe7","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":2}}}]}],"tangzhenen":[{"date":"2023-10-13","commitResults":[{"hash":"533b7989a5a1ab5bb5320352563ef8ec26703a36","isMergeCommit":false,"messageTitle":"Add delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":4}}},{"hash":"5a8687f571cd1e27f76be6509dbe561301672ebf","isMergeCommit":false,"messageTitle":"Update entry list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"972d977c09e7acc98f20d0f7126538392192348f","isMergeCommit":false,"messageTitle":"Update Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"3d2b111b51993622d4ee5a3533f64719aa479814","isMergeCommit":false,"messageTitle":"Bug fixes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":2}}},{"hash":"3294660fadf18a4228e61b926bdb7d1374e63746","isMergeCommit":false,"messageTitle":"Bug fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-29","commitResults":[{"hash":"9e176d18484505711f4040c5ed8c19799c56ef32","isMergeCommit":false,"messageTitle":"update aboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"a4b0f1a8ed42cdc2230395cdad3661cdef7bc58e","isMergeCommit":false,"messageTitle":"Delete command test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":3},"test-code":{"insertions":39,"deletions":0}}},{"hash":"65c3f395560267925a4062ef616a8f407780d2d7","isMergeCommit":false,"messageTitle":"Add list command test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":62,"deletions":0}}},{"hash":"458f95225ed5fb0c085a998a5adb432be8b44179","isMergeCommit":false,"messageTitle":"Add help command test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":76,"deletions":0}}},{"hash":"82a3b7fa9bd659457daad31eeb4b376f1d0c7182","isMergeCommit":false,"messageTitle":"Add user confirmation when deleting entry","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":4}}},{"hash":"e4790ccd72b01c5b9bdc81cc5fd387ccd5e6aff2","isMergeCommit":false,"messageTitle":"update delete command testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":57,"deletions":12}}},{"hash":"374462d22c6457e37185fcf96f1c36e2ffae575c","isMergeCommit":false,"messageTitle":"update delete command test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":6,"deletions":2}}},{"hash":"b599f17afa22d30fe0febf5b8fc691a410d52090","isMergeCommit":false,"messageTitle":"bug fixes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":2}}},{"hash":"e428fd3e5b4c0f5cbd78b932042185ce11b4738a","isMergeCommit":false,"messageTitle":"bug fix","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"3844616655c954f11c64374fa2e382e065580c39","isMergeCommit":true,"messageTitle":"Merge pull request #97 from tangzhenen/master","messageBody":"Add testing for list, delete, help and extend delete command","fileTypesAndContributionMap":{}}]}],"lctxct":[{"date":"2023-10-16","commitResults":[{"hash":"c0a6facf1ef9e936416052a7d76eaf23255016fd","isMergeCommit":false,"messageTitle":"Add add command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":5}}},{"hash":"632e790bd87588b55a753b76eaaf7d4dccb54216","isMergeCommit":false,"messageTitle":"Fix checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2}}},{"hash":"4b26b50b548553c814feb4174ddda85dc03134fb","isMergeCommit":false,"messageTitle":"Fix thrown exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"b61c4261525cf634b900f427e7ef9b882f00385a","isMergeCommit":false,"messageTitle":"Fix cause of date exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"bc517ce6a252ddf3a72742a4fb8ed074cc1edbfa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of github.com:lctxct/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"865340925053b521b9d91c616f26fbc04a762ba5","isMergeCommit":false,"messageTitle":"Decouple filehandler functions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":17}}},{"hash":"11d6042e07a6939cee64533690875a2366deb6c3","isMergeCommit":false,"messageTitle":"Move EntryHandler to main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-28","commitResults":[{"hash":"4394a0a78505bbb5df96ce7ff8c65e79b82cdcbc","isMergeCommit":false,"messageTitle":"Add input prompt","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"9a546b130db55a07862cad1fe776d47c1896a346","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":3}}},{"hash":"71f0a2f9adea67936991bdb756b5b4812194ec27","isMergeCommit":true,"messageTitle":"Merge pull request #84 from lctxct/add-input-prompt","messageBody":"Add input prompt","fileTypesAndContributionMap":{}}]},{"date":"2023-10-29","commitResults":[{"hash":"7566680d6432f1327c9d79e97e0fce1256f94c50","isMergeCommit":false,"messageTitle":"Modify save file formatting","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":13}}},{"hash":"59f0c98600743012db13cf717d528911d49e6c87","isMergeCommit":true,"messageTitle":"Merge pull request #85 from lctxct/modify-entry-loading","messageBody":"Modify save file formatting","fileTypesAndContributionMap":{}},{"hash":"7de3fcd9415ac19f9d1ca2b45d46eebdd6e02412","isMergeCommit":false,"messageTitle":"Update to use COMMAND_WORDs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":20}}},{"hash":"8331f9b1703d24dba16d1b68cc2d6ac016086694","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"580d519c695345b4e2e4dd3bd07726093db4e73e","isMergeCommit":true,"messageTitle":"Merge pull request #86 from lctxct/add-commandwords","messageBody":"Update to use COMMAND_WORDs","fileTypesAndContributionMap":{}},{"hash":"f90e278dc3d2f920b189e66bf9b80d86cf2c0479","isMergeCommit":false,"messageTitle":"Add execute()s to commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":25}}},{"hash":"fa1e3af7807c5828627b64414f4234ab6df87908","isMergeCommit":true,"messageTitle":"Merge pull request #87 from lctxct/add-command-execute","messageBody":"Add execute()s to commands","fileTypesAndContributionMap":{}},{"hash":"314155a753a8959dc53f40c2b0301b55f4849166","isMergeCommit":false,"messageTitle":"Move routing functionality to EntryHandler","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":41,"deletions":24}}},{"hash":"04b5df6d75fb2be3b92ae02d90f8395b6667ae16","isMergeCommit":true,"messageTitle":"Merge pull request #88 from lctxct/improve-command-routing","messageBody":"Move routing functionality to EntryHandler","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"imaginarys96":{"docs":61,"functional-code":204,"test-code":0},"woodenclock":{"docs":254,"functional-code":780,"test-code":22,"other":6},"tangzhenen":{"docs":2,"functional-code":44,"test-code":227},"lctxct":{"docs":0,"functional-code":226,"test-code":0}},"authorContributionVariance":{"imaginarys96":2105.1414,"woodenclock":41935.105,"tangzhenen":2623.1946,"lctxct":1725.1807},"authorDisplayNameMap":{"imaginarys96":"CS2113T-W11-2 YANG..REMY","woodenclock":"CS2113T-W11-2 LEE ..GMIN","tangzhenen":"CS2113T-W11-2 TANG..N EN","lctxct":"CS2113T-W11-2 LIEN..TING"}} diff --git a/archive.zip b/archive.zip index 7cd74f483a4abaa48edc488d35cf1584c8b7a816..5d0a1e7b6643bbf620220cb81838472384e8526e 100644 GIT binary patch delta 488452 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 E2g90y?*IS* delta 458466 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

R$!gye`S%N^=$qjEuv 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

D5YNtl4i&@bvt5AHxCU6>E=Zr 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Μ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 M3go01ELi*h0gL+_`Tzg` diff --git a/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index c99ef81..7524992 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,24 +1,24 @@ -Oct 29, 2023 3:54:56 AM reposense.system.LogsManager addFileHandler +Oct 29, 2023 1:01:46 PM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Oct 29, 2023 3:54:56 AM reposense.parser.CsvParser validateHeader +Oct 29, 2023 1:01:46 PM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, repo-config.csv, and recognized columns: Ignore Standalone Config, Repository's Location, Branch, Shallow Cloning, File formats, Ignore Glob List, Ignore Authors List, Find Previous Authors, Ignore Commits List -Oct 29, 2023 3:54:56 AM reposense.parser.CsvParser validateHeader +Oct 29, 2023 1:01:46 PM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, author-config.csv, and recognized columns: Author's Emails, Repository's Location, Author's GitHub ID, Branch, Author's Display Name, Ignore Glob List, Author's Git Author Name -Oct 29, 2023 3:54:56 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Oct 29, 2023 1:01:47 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias choonsiang found. The alias will belong to the last author - ChoonSiang -Oct 29, 2023 3:54:56 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Oct 29, 2023 1:01:47 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias barbaracwx found. The alias will belong to the last author - Barbaracwx -Oct 29, 2023 3:54:56 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Oct 29, 2023 1:01:47 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias oppa1 found. The alias will belong to the last author - MrOPPA1 -Oct 29, 2023 3:54:56 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Oct 29, 2023 1:01:47 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias choonsiang found. The alias will belong to the last author - ChoonSiang -Oct 29, 2023 3:54:56 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Oct 29, 2023 1:01:47 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias barbaracwx found. The alias will belong to the last author - Barbaracwx -Oct 29, 2023 3:54:56 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Oct 29, 2023 1:01:47 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias oppa1 found. The alias will belong to the last author - MrOPPA1 -Oct 29, 2023 3:54:56 AM reposense.parser.CsvParser validateHeader +Oct 29, 2023 1:01:47 PM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, group-config.csv, and recognized columns: Globs, Repository's Location, Group Name -Oct 29, 2023 3:54:56 AM reposense.git.GitConfig getGlobalGitLfsConfig +Oct 29, 2023 1:01:47 PM reposense.git.GitConfig getGlobalGitLfsConfig WARNING: Could not get global git lfs config java.lang.RuntimeException: reposense.system.CommandRunnerProcessException: Error returned from command git config --global --list on path . : fatal: unable to read config file '/home/runner/.gitconfig': No such file or directory @@ -34,313 +34,313 @@ fatal: unable to read config file '/home/runner/.gitconfig': No such file or dir at reposense.system.CommandRunner.runCommand(CommandRunner.java:21) ... 3 more -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-2/tp.git... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T17-3/tp.git... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-4/tp.git... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-2/tp.git... +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T17-4/tp.git... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-4/tp.git... +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-W12-4/tp.git to complete... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T17-4/tp.git to complete... +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-W12-2/tp.git to complete... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:47 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T17-3/tp.git to complete... -Oct 29, 2023 3:54:56 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T17-4/tp.git to complete... -Oct 29, 2023 3:54:57 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:48 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S1-CS2113-W12-2/tp.git completed! -Oct 29, 2023 3:54:57 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:48 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T18-1/tp.git... -Oct 29, 2023 3:54:57 AM reposense.report.ReportGenerator analyzeRepos +Oct 29, 2023 1:01:48 PM reposense.report.ReportGenerator analyzeRepos INFO: [1/17] Analyzing https://github.com/AY2324S1-CS2113-W12-2/tp.git (master)... -Oct 29, 2023 3:54:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T18-1/tp.git to complete... -Oct 29, 2023 3:54:57 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-W12-2/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:54:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-W12-2/tp.git (master)... -Oct 29, 2023 3:54:57 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:48 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S1-CS2113-W12-4/tp.git completed! -Oct 29, 2023 3:54:57 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:48 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-F11-3/tp.git... -Oct 29, 2023 3:54:57 AM reposense.report.ReportGenerator analyzeRepos +Oct 29, 2023 1:01:48 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T18-1/tp.git to complete... +Oct 29, 2023 1:01:48 PM reposense.report.ReportGenerator analyzeRepos INFO: [2/17] Analyzing https://github.com/AY2324S1-CS2113-W12-4/tp.git (master)... -Oct 29, 2023 3:54:57 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:48 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-F11-3/tp.git to complete... -Oct 29, 2023 3:54:57 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:01:48 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-W12-2/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-W12-2/tp.git (master)... +Oct 29, 2023 1:01:48 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-W12-4/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:54:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:01:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-W12-4/tp.git (master)... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-3/tp.git completed! -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-1/tp.git... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-W12-1/tp.git to complete... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-4/tp.git completed! -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-3/tp.git... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S1-CS2113-T18-1/tp.git completed! -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-W12-3/tp.git... +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-W12-3/tp.git to complete... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-F11-3/tp.git completed! +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T18-2/tp.git... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:49 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T18-2/tp.git to complete... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-F11-3/tp.git completed! -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-4/tp.git completed! +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T18-3/tp.git... -Oct 29, 2023 3:54:58 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T18-3/tp.git to complete... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-W12-1/tp.git completed! -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-W12-3/tp.git completed! +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113T-W11-1/tp.git... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-W12-1/tp.git completed! +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113T-W11-1/tp.git to complete... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-W12-3/tp.git completed! -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T18-4/tp.git... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T18-4/tp.git to complete... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-T18-3/tp.git completed! -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S1-CS2113-T18-2/tp.git completed! -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-F11-1/tp.git... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:50 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-F11-1/tp.git to complete... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-T18-3/tp.git completed! +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-F11-2/tp.git... -Oct 29, 2023 3:54:59 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-F11-2/tp.git to complete... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113T-W11-1/tp.git completed! -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-T18-4/tp.git completed! +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T17-2/tp.git... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T17-2/tp.git to complete... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-F11-1/tp.git completed! -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-T18-4/tp.git completed! -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner spawnCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113T-W11-1/tp.git completed! +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113T-W11-2/tp.git... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T17-1/tp.git... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113T-W11-2/tp.git to complete... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-F11-2/tp.git completed! -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-F11-1/tp.git completed! +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S1-CS2113-T17-1/tp.git... +Oct 29, 2023 1:01:51 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S1-CS2113-T17-1/tp.git to complete... -Oct 29, 2023 3:55:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-W12-2/tp.git (master)... -Oct 29, 2023 3:55:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-W12-4/tp.git (master)... -Oct 29, 2023 3:55:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-F11-2/tp.git completed! +Oct 29, 2023 1:01:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-W12-2/tp.git (master)... -Oct 29, 2023 3:55:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113T-W11-2/tp.git completed! +Oct 29, 2023 1:01:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-2/tp.git completed! +Oct 29, 2023 1:01:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-W12-4/tp.git (master)... -Oct 29, 2023 3:55:00 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:52 PM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-1/tp.git completed! +Oct 29, 2023 1:01:52 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-W12-2/tp.git (master) completed! -Oct 29, 2023 3:55:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [3/17] Analyzing https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... -Oct 29, 2023 3:55:00 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:52 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-W12-4/tp.git (master) completed! -Oct 29, 2023 3:55:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [4/17] Analyzing https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-2/tp.git completed! -Oct 29, 2023 3:55:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113T-W11-2/tp.git completed! -Oct 29, 2023 3:55:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S1-CS2113-T17-1/tp.git completed! -Oct 29, 2023 3:55:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-T17-4/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... -Oct 29, 2023 3:55:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-T17-3/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... -Oct 29, 2023 3:55:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... -Oct 29, 2023 3:55:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... -Oct 29, 2023 3:55:01 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-4/tp.git (master) completed! -Oct 29, 2023 3:55:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [5/17] Analyzing https://github.com/AY2324S1-CS2113-T18-1/tp.git (master)... -Oct 29, 2023 3:55:02 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:01:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [3/17] Analyzing https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... +Oct 29, 2023 1:01:52 PM reposense.report.ReportGenerator analyzeRepos +INFO: [4/17] Analyzing https://github.com/AY2324S1-CS2113-T18-1/tp.git (master)... +Oct 29, 2023 1:01:52 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-T18-1/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:01:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T18-1/tp.git (master)... -Oct 29, 2023 3:55:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... -Oct 29, 2023 3:55:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... -Oct 29, 2023 3:55:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-3/tp.git (master) completed! -Oct 29, 2023 3:55:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [6/17] Analyzing https://github.com/AY2324S1-CS2113-F11-3/tp.git (master)... -Oct 29, 2023 3:55:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-F11-3/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-F11-3/tp.git (master)... -Oct 29, 2023 3:55:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:52 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-T17-3/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... +Oct 29, 2023 1:01:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T18-1/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T18-1/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-T18-1/tp.git (master) completed! -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [7/17] Analyzing https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-W12-1/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:54 PM reposense.report.ReportGenerator analyzeRepos +INFO: [5/17] Analyzing https://github.com/AY2324S1-CS2113-F11-3/tp.git (master)... +Oct 29, 2023 1:01:54 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-F11-3/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-F11-3/tp.git (master)... +Oct 29, 2023 1:01:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... +Oct 29, 2023 1:01:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-3/tp.git (master)... +Oct 29, 2023 1:01:55 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-3/tp.git (master) completed! +Oct 29, 2023 1:01:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [6/17] Analyzing https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... +Oct 29, 2023 1:01:55 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-T17-4/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... +Oct 29, 2023 1:01:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-F11-3/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-F11-3/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:55 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-F11-3/tp.git (master) completed! -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [8/17] Analyzing https://github.com/AY2324S1-CS2113-W12-3/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:01:55 PM reposense.report.ReportGenerator analyzeRepos +INFO: [7/17] Analyzing https://github.com/AY2324S1-CS2113-W12-3/tp.git (master)... +Oct 29, 2023 1:01:55 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-W12-3/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:01:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-W12-3/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S1-CS2113-W12-1/tp.git (master) completed! -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [9/17] Analyzing https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... +Oct 29, 2023 1:01:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-4/tp.git (master)... +Oct 29, 2023 1:01:56 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-4/tp.git (master) completed! +Oct 29, 2023 1:01:56 PM reposense.report.ReportGenerator analyzeRepos +INFO: [8/17] Analyzing https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... +Oct 29, 2023 1:01:56 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-W12-1/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... +Oct 29, 2023 1:01:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-W12-3/tp.git (master)... -Oct 29, 2023 3:55:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-T18-3/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-W12-3/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-W12-3/tp.git (master) completed! -Oct 29, 2023 3:55:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [10/17] Analyzing https://github.com/AY2324S1-CS2113-T18-2/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:01:56 PM reposense.report.ReportGenerator analyzeRepos +INFO: [9/17] Analyzing https://github.com/AY2324S1-CS2113-T18-2/tp.git (master)... +Oct 29, 2023 1:01:56 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-T18-2/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:01:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T18-2/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S1-CS2113-T18-3/tp.git (master) completed! -Oct 29, 2023 3:55:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [11/17] Analyzing https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... +Oct 29, 2023 1:01:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-W12-1/tp.git (master)... +Oct 29, 2023 1:01:57 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S1-CS2113-W12-1/tp.git (master) completed! +Oct 29, 2023 1:01:57 PM reposense.report.ReportGenerator analyzeRepos +INFO: [10/17] Analyzing https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... +Oct 29, 2023 1:01:57 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-T18-3/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... +Oct 29, 2023 1:01:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T18-2/tp.git (master)... -Oct 29, 2023 3:55:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T18-2/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-T18-2/tp.git (master) completed! -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [12/17] Analyzing https://github.com/AY2324S1-CS2113-T18-4/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [11/17] Analyzing https://github.com/AY2324S1-CS2113-T18-4/tp.git (master)... +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-T18-4/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:01:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T18-4/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master) completed! -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [13/17] Analyzing https://github.com/AY2324S1-CS2113-F11-1/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-F11-1/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-F11-1/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... +Oct 29, 2023 1:01:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T18-3/tp.git (master)... +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S1-CS2113-T18-3/tp.git (master) completed! +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [12/17] Analyzing https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... +Oct 29, 2023 1:01:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T18-4/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T18-4/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-T18-4/tp.git (master) completed! -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepos +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator analyzeRepos +INFO: [13/17] Analyzing https://github.com/AY2324S1-CS2113-F11-1/tp.git (master)... +Oct 29, 2023 1:01:58 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-F11-1/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-F11-1/tp.git (master)... +Oct 29, 2023 1:01:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... +Oct 29, 2023 1:01:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master)... +Oct 29, 2023 1:01:59 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S1-CS2113T-W11-1/tp.git (master) completed! +Oct 29, 2023 1:01:59 PM reposense.report.ReportGenerator analyzeRepos INFO: [14/17] Analyzing https://github.com/AY2324S1-CS2113-F11-2/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:01:59 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-F11-2/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:01:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-F11-2/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-F11-1/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:01:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-F11-1/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:01:59 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-F11-1/tp.git (master) completed! -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [15/17] Analyzing https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113-T17-2/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... -Oct 29, 2023 3:55:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:01:59 PM reposense.report.ReportGenerator analyzeRepos +INFO: [15/17] Analyzing https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master)... +Oct 29, 2023 1:01:59 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:01:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master)... +Oct 29, 2023 1:01:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-F11-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:02:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-F11-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:02:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-F11-2/tp.git (master) completed! -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [16/17] Analyzing https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:02:00 PM reposense.report.ReportGenerator analyzeRepos +INFO: [16/17] Analyzing https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... +Oct 29, 2023 1:02:00 PM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S1-CS2113-T17-2/tp.git (master) does not contain a standalone config file. +Oct 29, 2023 1:02:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... +Oct 29, 2023 1:02:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:02:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:02:00 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113T-W11-2/tp.git (master) completed! -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator analyzeRepos +Oct 29, 2023 1:02:00 PM reposense.report.ReportGenerator analyzeRepos INFO: [17/17] Analyzing https://github.com/AY2324S1-CS2113-T17-1/tp.git (master)... -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-2/tp.git (master) completed! -Oct 29, 2023 3:55:06 AM reposense.report.ReportGenerator updateRepoConfig +Oct 29, 2023 1:02:00 PM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S1-CS2113-T17-1/tp.git (master) does not contain a standalone config file. -Oct 29, 2023 3:55:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Oct 29, 2023 1:02:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S1-CS2113-T17-1/tp.git (master)... -Oct 29, 2023 3:55:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Oct 29, 2023 1:02:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... +Oct 29, 2023 1:02:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-2/tp.git (master)... +Oct 29, 2023 1:02:01 PM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-2/tp.git (master) completed! +Oct 29, 2023 1:02:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S1-CS2113-T17-1/tp.git (master)... -Oct 29, 2023 3:55:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Oct 29, 2023 1:02:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S1-CS2113-T17-1/tp.git (master)... -Oct 29, 2023 3:55:07 AM reposense.report.ReportGenerator analyzeRepo +Oct 29, 2023 1:02:02 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S1-CS2113-T17-1/tp.git (master) completed! -Oct 29, 2023 3:55:07 AM reposense.report.ReportGenerator generateReposReport +Oct 29, 2023 1:02:02 PM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/tp-dashboard/tp-dashboard/reposense-report -Oct 29, 2023 3:55:07 AM reposense.RepoSense main -INFO: Elapsed processing time: 11.40 second(s) +Oct 29, 2023 1:02:02 PM reposense.RepoSense main +INFO: Elapsed processing time: 16.02 second(s) diff --git a/summary.json b/summary.json index ec7ac3b..621d899 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"056fa5fcd2","reportGeneratedTime":"Sun Oct 29 11:54:56 2023 UTC+08:00","reportGenerationTime":" 11.25 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2113 tP Code Dashboard","repos":[{"location":{"location":"https://github.com/AY2324S1-CS2113T-W11-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113T-W11-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113T-W11-1/tp[master]","outputFolderName":"AY2324S1-CS2113T-W11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113T-W11-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113T-W11-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113T-W11-2/tp[master]","outputFolderName":"AY2324S1-CS2113T-W11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-1/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-2/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-3/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-4/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-4","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-4/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-1/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-2/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-3/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-3_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-4/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-4","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-4/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-4_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-1/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-2/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-3/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-3_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-4/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-4","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-4/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-4_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-F11-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-F11-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-F11-1/tp[master]","outputFolderName":"AY2324S1-CS2113-F11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-F11-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-F11-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-F11-2/tp[master]","outputFolderName":"AY2324S1-CS2113-F11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-F11-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-F11-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-F11-3/tp[master]","outputFolderName":"AY2324S1-CS2113-F11-3_tp_master"}],"errorSet":[],"sinceDate":"2023-09-22","untilDate":"2023-10-29","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} +{"repoSenseVersion":"056fa5fcd2","reportGeneratedTime":"Sun Oct 29 21:01:47 2023 UTC+08:00","reportGenerationTime":" 15.81 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2113 tP Code Dashboard","repos":[{"location":{"location":"https://github.com/AY2324S1-CS2113T-W11-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113T-W11-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113T-W11-1/tp[master]","outputFolderName":"AY2324S1-CS2113T-W11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113T-W11-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113T-W11-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113T-W11-2/tp[master]","outputFolderName":"AY2324S1-CS2113T-W11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-1/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-2/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-3/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-W12-4/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-W12-4","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-W12-4/tp[master]","outputFolderName":"AY2324S1-CS2113-W12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-1/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-2/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-3/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-3_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T17-4/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T17-4","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T17-4/tp[master]","outputFolderName":"AY2324S1-CS2113-T17-4_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-1/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-2/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-3/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-3_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-T18-4/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-T18-4","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-T18-4/tp[master]","outputFolderName":"AY2324S1-CS2113-T18-4_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-F11-1/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-F11-1","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-F11-1/tp[master]","outputFolderName":"AY2324S1-CS2113-F11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-F11-2/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-F11-2","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-F11-2/tp[master]","outputFolderName":"AY2324S1-CS2113-F11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S1-CS2113-F11-3/tp.git","repoName":"tp","organization":"AY2324S1-CS2113-F11-3","domainName":"github"},"branch":"master","displayName":"AY2324S1-CS2113-F11-3/tp[master]","outputFolderName":"AY2324S1-CS2113-F11-3_tp_master"}],"errorSet":[],"sinceDate":"2023-09-22","untilDate":"2023-10-29","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}}